라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다. 단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다. 반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다. 보통 프레임워크 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식이다. 최근에는 툴킷, 엔진, 라이브러리 등도 유행을 따라서 무작정 프레임워크라고 부르기도 하는데 이는 잘못된 것이다. 프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 한다. 토비의 스프링(P.94)
본래 공부한 내용을 정리할 목적으로 블로그를 하는거라 일기성 글은 자주 올리지 않으려고 하지만, 오늘은 마음이 복잡하기도 하고, 첫 커리어를 시작하기 전에 그동안 해온 것들을 정리하는 마음으로 글을 써두면 몇년뒤 내가 다시 봤을 때 좋지 않을까해서 글을 쓴다. 아직도 잊히지가 않는다. 코딩해보겠다고 무작정 저 책을 사서 집에 왔던 그때가. 벌써 587일 전. C를 공부하곤 재미를 붙이고, 파이썬넘어갔다가 Django도 써보고 또 자바배우느라 벌써 C는 거의 다 까먹었다. 회사를 다니면서 공부하는데 얼마나 재밌던지 힘든 줄도 모르고 퇴근하고나면 얼른 공부하고 싶어서 집에 막 뛰어가고 그랬다. 발전없는 주변환경에 진로를 바꾸겠다고 혼자 공부하는데, 당연히 시행착오도 많았다. 지금이었으면 간단히 해결했을 문제..
1. 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에는 static을 붙여서 클래스변수로 정의한다. 클래스변수로 정의하게 되면 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되어 Method Area에 저장된다. 2. 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다. 클래스메서드가 호출되었을 때 인스턴스가 존재하지 않을수도 있기 때문에 클래스 메서드에서 인스턴스 변수의 사용을 금지한다. 반대로 인스턴스 변수나 인스턴스 메서드에서는 클래스멤버들을 사용하는 것이 언제나 가능하다. 클래스 멤버들의 생성이 인스턴스의 생성보다 먼저이기 때문이다. 3. 인스턴스변수를 필요로 하지 않는 경우, static을 붙이는 것이 좋다. 이렇게 하면 클래스가 메모리에 올라갈 때 이미 함께 올라가기 때문..
하나의 프로덕트를 만든다고 할 때, 처음부터 끝까지 전부 직접 개발하는 경우는 드물다. 외부 패키지, API, 프레임워크 등 외부 코드를 사용하게 된다. 이때, 제공자들은 범용적으로 사용되도록 하지만 사용자는 자신의 요구에 집중하는 인터페이스를 원한다. 경계 인터페이스를 이용할 때는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의한다. 외부 코드를 사용할 때는 먼저 간단한 테스트 케이스를 작성해서 외부 코드를 익히자. 이렇게 테스트를 통하게 되면 필요한 지식만 확보하게 되고, 이해도도 높여준다. 그리고 새 버전이 나왔을 때 우리 코드와 호환되는지, 호환되지 않는지 테스트를 통해 바로 알 수 있게 된다. 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하자. 새로운 클래스로 경계를 감..