본문 바로가기
[Effective Java] 작명 패턴보다는 주석(annotation)을 사용하자. [Effective Java] 작명 패턴보다는 주석(annotation)을 사용하자. - 1.5 배포판 이전에는 도구나 프레임워크에서 특별히 취급할 필요가 있는 프로그램 요소들을 나타내기 위해 작명 패턴(naming pattern)을 사용하는 것이 일반적. 예를 들어 JUnit 테스팅 프레임워크에서는 테스트 메소드들의 이름을 test로 시작하도록 하였다. 이 방법은 효과는 있지만 단점들이 있다. 1. 철자상의 오류로 인한 오류 2. 적합한 프로그램 요소에만 사용되는지 확신할 방법이 없다. 3. 매개 변수 값을 프로그램 요소와 연관시키는 좋은 방법을 제공하지 않는다. - 작명패턴의 단점은 annotation 을 사용하여 깔끔히 해결된다. - annotation 정의는 다음과 같이 한다. @Retention.. 2017. 1. 2.
[Effective Java] 인터페이스를 사용해서 확장 가능한 enum 을 만들자. [Effective Java] 인터페이스를 사용해서 확장 가능한 enum 을 만들자. - 대개의 경우 enum 의 확장은 좋지 않은 생각으로 밝혀졌다. - 확장 가능한 enum 타입을 사용해야 할 경우가 최소한 한 가지가 있는데, 작동 코드(operation code) 또는 opcode 라고 하는 것으로 특정 머신의 작동을 나타내는 요소들을 갖는 enum 타입이다. - 인터페이스를 구현한 enum 에 generic 을 설정할 경우는 아래와 같이 할 수 있다. bounded wild card Class opSet // class 객체가 enum 과 Operation 서브 타입 모두임을 나타냄. unbounded wild card Collection 2016. 12. 29.
[Effective Java] 비트(bit) 필드 대신 EnumSet 을 사용하자. [Effective Java] 비트(bit) 필드 대신 EnumSet 을 사용하자. - 보통 비트 값을 constant 로 사용할 때 아래와 같이 int enum 패턴을 사용하여 각 상수에 2의 n승을 대입한다. // 비트 필드 public static final int STYLE_BOLD = 1 2016. 12. 26.
[Effective Java] int 상수 대신 enum 을 사용하자. [Effective Java] int 상수 대신 enum 을 사용하자. - int enum pattern 이라고 불리는 int 를 이용한 분기는 단점이 많다. - 타입 안전을 보장하지도 않고, 편리하게 사용할 수 있는 방법도 제공하지 않는다. 즉 취약하다. - int enum 상수를 출력 가능한 문자열로 쉽게 바꾸는 방법도 없다. - 하나의 int enum 그룹에 있는 모든 상수를 loop 처리하거나, 그룹 사이즈를 알 수 있는 좋은 방법도 없다. - int enum 패턴의 변이로 String enum 패턴이 있는데 더더욱 바람직하지 않다. print 하는 부분에서는 좋지만, 문자열 비교에 의존하여 성능 문제가 생길 수도 있다. 더욱 문제가 되는 것은 필드명 대신 string 상수 값을 클라이언트 코드에.. 2016. 12. 19.
[Effective Java] 타입 안전이 보장되는 혼성(heterogeneous) 컨테이너의 사용을 고려하자. [Effective Java] 타입 안전이 보장되는 혼성(heterogeneous) 컨테이너의 사용을 고려하자. - 제네릭은 Set 이나 Map 같은 컬렉션, ThreadLocal 이나 AtomicReference 같은 단일 요소(single-element) 저장 컨테이너에 가장 많이 사용된다. 이 컬렉션들은 컨테이너를 매개변수화 한 것이다. 컨테이너의 특성에 따라 사용 가능한 타입 매개변수의 갯수가 자연스럽게 제한된다. - 타입 안전을 지키면서 더 큰 유연성을 갖기 위해서 ( 예를 들면 nosql 처럼 column 이 상황에 따라 다른 경우 )는 컨테이너 대신 키(key) 를 매개변수화 해주면 된다. - Class 클래스는 1.5부터 제네릭화되었다. 클래스 리터럴 타입은 Class 가 아니고 Class.. 2016. 11. 22.
[Effective Java] 태그(tagged) 클래스보다는 클래스 계층을 사용하자. [Effective Java] 태그(tagged) 클래스보다는 클래스 계층을 사용하자. - 인스턴스들이 두 개 이상의 특성으로 분류되고 그런 특성을 나타내는 태그(tag) 필드를 갖는 클래스들을 태그 클래스라고 한다. 예를 들어 Figure 라는 class 가 있는데, 생성자의 종류에 따라 Rectangle 도 되었다가 Circle 도 될 수 있는 녀석. 한 Class 가 조건에 따라 많이 다른 특성의 class 의 형태로 변하는 녀석을 말한다. - 태그 클래스(Tagged class) 는 단점 투성이다. enum 선언, 태그 필드, switch, if 문 등을 포함해서 각종 복잡한 코드로 가독성을 떨어뜨린다. 다른 종류의 인스턴스에 속하는 부적절한 필드를 인스턴스가 가지고 있어 필요 없는 메모리 할당과.. 2016. 11. 14.
[오사카 맛집] 551 호라이 - 부타망 먹으러 오세염~ [오사카 맛집] 551 호라이 - 부타망 먹으러 오세염~ 정말 오랫동안 이런저런 사정으로 쓰지 못했던 일본 여행기를 이어서 씁니다.시간 날 때마다 빨리 써야겠어요. 제가 조만간 라오스로 여행을 가는데요.라오스 여행기는 언제 쓸 수 있을까요? 이제 맛이라는게, 기분이라는게, 그리고 기억이라는 것이시간이 지나면서 퇴색되고, 왜곡되고, 잊혀지기 마련인데 말이죠. 이번 라오스를 다녀오면,예약을 걸어 놓더라도 무조건 글을 열심히 써야겠습니다. 잡담은 그만하고오늘은 오사카 맛집 551 호라이에 대해서 이야기해볼께요. 551 호라이는 첫번째 일본여행 왔을 때 참 맛있게 먹었던,부타망 ( 돼지고기 만두 ) 를 파는 가게입니다. 저녁시간 때에는 줄을 서서 먹곤 하는 집인데,부타망 이외에도 우리에게 빠스로 잘 알려져 있는.. 2016. 10. 28.
[Effective Java] 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. - 상속은 코드를 재사용하는 강력한 방법이다. 그러나 일을 하는데 가장 좋은 도구는 아니다. 잘못 사용하면 부실한 소프트웨어를 초래한다. - 동일 프로그래머가 서브 클래스와 수퍼 클래스의 구현을 관장하는 같은 패키지 내에서 상속을 사용하는 것은 안전하다 상속을 위해 특별히 설계되고 문서화된 클래스를 확장(extends) 하기 위해 상속을 사용하는 것도 안전하다. 그러나 다른 패키지에 걸쳐 일반적인 실체 클래스로부터 상속을 받는 것은 위험하다. - 상속은 캡슐화(encapsulation) 을 위배한다. 올바른 동작을 위해 서브 클래스는 자신의 수퍼 클래스가 구현하는 상세 내역에 의존한다. 수퍼 클래스의 구현 내역은 소프.. 2016. 10. 27.
[Effective Java] 가변성을 최소화 하자. [Effective Java] 가변성을 최소화 하자. -불변 클래스는 자신의 인스턴스가 갖는 값을 변경할 수 없는 클래스. - 불변 클래스는, 가변 클래스에 비해 설계와 구현 및 사용이 더 쉽다. 에러 발생이 적으며 보안이나 사용 측면에서 더 안전하다. - 불변 클래스를 만들 때는 다음 다섯 가지 규칙을 따르자. 1. 객체의 상태를 변경하는 그 어떤 메소드도 제공하지 않는다. 2. 상속을 할 수 없도록 하자. ( class 에 final 을 주어 막을 수 있다. ) 3. 모든 필드를 final 로 지정한다. 4. 모든 필드를 private 으로 지정한다. 5. 가변 컴포넌트의 직접적인 외부 접근을 막자. 생성자와 접근자 메소드 및 readObject 메소드에서 해당 객체의 방어 복사본을 만들어 사용하도록.. 2016. 10. 24.
반응형