java나 c++만 사용하던 사람이 얼핏 보기에 장점은
- 신기하다 ;;;
- 코딩을 줄여준다.
- 위의 이유로 인해서 소스 보기가 편하다.
정도로 보이는데요.
뭔가 결정적인 잇점이 있을까요?
자바에서도 애노테이션 같은 메타 프로그래밍 기능이 있고 개인적으로 자바
언어 차원의 지원은 약하지만 아키텍쳐적으로 메타프로그래밍이 가능하다고
생각합니다. 자바라는 언어가 원래 언어는 단순하게 유지하고 객체지향 설계
와 아키택쳐를 통해 문제를 해결하자는 철학을 가졌다고 봅니다.
10. 6. 30. 오후 12:47, AlexK 쓴 글:
> 2. 1번이 맞다고 하면, 아래와 같은 방식으로 사용하는 것을 생각해 봤는데
>
> void main(){
> //뒤에 클로져 안에는 상황에 따라 다른 코드가 들어갈 수 있다고 하면,
> //회원에 따라 처리해야할 메쏘드를 외부로 빼서 관리 할 수도 있을 것
> 같구요.
> member.metaClass.action = { -> println 'member method executed'; }
>
> //결과 : 'member method executed'
> meber.action();
> }
>
> - 위의 경우 java 에서는 interface + anonymous class 로 조합할 수 있을것
> 같은데, 위의 경우는 java 잘 쓰는 사람이면 'java로도 되!'라고 할 것 같구요.
동적으로 메서드를 추가하는 거라면 동적 프록시 기법을 쓰더라도 최소한 인
터페이스는 미리 만들어놔야겠죠. 어짜피 자바는 정적 타입 언어이니 너무나
당연한 조건이겠지만...
> - 다른 예로 없는 메쏘드를 추가하는 경우(ruby의 ActiveRecord같이)는, 신기하긴 한데, 그런 것의 사용 예가 어떤게 있을까요?
> -> 위의 경우 없는 메쏘드인 action을 추가했는데, 이런것들이 실전에서 획기적인 편의성을 제공하는 예가 있을까요?
저는 너무 자바적인 생각을 해서 그런지 클래스에 동적으로 메서드를 추가해
서 전역적인 영향을 주는 행위는 조금 조심스럽습니다. 특정 영역에서만 추가
된 메서드가 효과를 발휘하도록 하는 장치가 있으면 좋겠지만 제가 아직 그루
비를 깊이 공부하지 않아서 그런지 못 찾았네요.
그리고 메서드 추가야 그렇다고치고 동적 메서드 오버라이딩은 LSP 원칙을 위
배할 가능성이 너무 높아 보입니다. 그 객체 다른 곳에서는 절대 예상 못한
용도로 사용되지 않는다는 보장이 있을 때만 이런 메타프로그래밍 기법을 제
한적으로 써야하지 않나 싶습니다.
잘못하다가는 마치 goto문이 편하니 다시 도입하자고 말하는 것과 비슷한 상
황이 생기지 않을지 걱정되네요.
역시 전 비관적인가 봅니다.
회로 구성하기 귀찮다고 전선 가져다가 이리 저리 합선시키는 것과 같아서,
자신이 만든 코드도 일주일 지나면 관리하기가 어려워집니다.
컴파일러가 문법 오류를 찾아주지 못하고,
IDE 에서 코드 어시스트도 해주지 못합니다.
루비스트들은 이런 문제를 테스트케이스로 해결하면 된다고 하는데,
이런 것은 기계가 검사하는 것이 (컴파일시에) 적절하다고 생각합니다.
위와 같이 덜 복잡하게 코딩하는 다이나믹 언어들이 각광을 받기 시작한 것은
Java 가 장황하고 쓰기 불편했기 때문이지
스터틱 언어 방식 자체에 문제가 있었던 것이 아닙니다.
Scala 쓰시면 타입 체킹 모두 하면서
Java 보다 훨신 간출하게 코딩하실 수 있습니다.
나의 iPhone에서 보내고 싶음
2010. 7. 5. 오전 1:44 drypot <dry...@gmail.com> 작성:
--