본문 바로가기
[Design Pattern/Java] Equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. 안녕하세요. 돼지왕 왕돼지입니다. 오늘은 Equals 메소드를 오버라이딩 할 떄는 보편적 계약을 따르자. 라는 주제로 이야기해보고자 합니다. 이 글은 "Effective Java" 의 글을 요약 정리한 것입니다. Introduction. Object 의 function 들은 기본적으로 sub class 에서 override 하여 사용 하도록 설계하였습니다. 하여, 모든 Object 들은 기본적으로 Object 의 function 들을 override 하여 사용하는 것이 좋습니다. 하지만, equals 메소드를 오버라이딩 할 때는 보편적 계약을 따라야 합니다. Instance 의 동일 여부를 판정하는 equals 메소드의 오버라이딩은 간단한 것 같지만, 잘못되는 경우가 많아서 참담한 결과를 초래할 수 있기.. 2012. 2. 22.
[Design Pattern/Java] finalizer ( 파이널라이저 ) 사용을 피하자. 안녕하세요 돼지왕왕돼지입니다. 오늘은 finalizer (파이널라이저) 사용을 피하자. 라는 주제로 이야기를 해볼까 합니다. 이 글은 "Effective Java" 를 기반으로 작성하였습니다. Finalizer 왜 피해야 하는가? - Finalizer 는 예측 불가에다가 위험하기도 하며 일반적으로 불필요하다. 파이널라이저를 사용하면 예측이 어려운 프로그램 실행과 성능 저하 및 이식성의 문제가 생길 수 있다. 파이널라이저의 문제점 - 신속하게 실행된다는 보장이 없다. 객체가 사용할 수 없게 되는 시점부터 파이널라이저가 실행되는 시점까지는 긴 시간이 소요될 수 있다. 즉! 실행시간이 중요한 작업을 "절대!" 하지 말아야 한다는 것. ( ex) finalizer 에서 파일 닫기 ) - Finalizer 의 수.. 2012. 2. 13.
[Design Pattern/Java] 쓸모 없는 객체 참조를 제거하자. 안녕하세요 돼지왕왕돼지입니다. 오늘은 쓸모 없는 객체 참조를 제거하자. 라는 주제로 이야기하고자 합니다. 이 글은 "Effective Java" 를 기반으로 작성되었습니다. 자바의 GC는 만능이 아니다. - 자바와 같이 가비지 컬렉션 ( Garbage Collection 이하 G.C. ) 을 자동으로 해주는 언어는 G.C.가 더 이상 참조되지 않는 객체들의 메모리를 자동으로 회수합니다. 그래서 자칫하면 우리가 메모리 관리를 고려하지 않아도 된다는 생각을 가질 수 있으나, 그것은 사실이 아닙니다. 2012/01/12 - [프로그래밍 놀이터/자바] - [Java] Garbage Collection ( GC ) 가 뭐 하는 녀석인지 한 번 해부해보자. 메모리 누출 ( Memory Leak ). - 메모리 누출.. 2012. 2. 10.
[Design Pattern/Java] 불필요한 객체의 생성을 피하자. 안녕하세요 돼지왕왕돼지입니다. 오늘은 불필요한 객체의 생성을 피하자. 라는 주제를 함께 알아보고자 합니다. 이 글은 "Effective Java" 내용을 기반으로 합니다. 불필요한 객체 생성을 왜 피하는가? 기능적으로 동일한 객체를, 필요한 때마다 매번 새로 생성하기보다는 하나의 객체를 재사용하는 것이 좋을 때가 많습니다. 재사용을 하면 객체 생성에 소요되는 비용( 시간과 자원)이 절감되므로 실행 속도가 더 빨라지고 코드도 보기 좋게 작성할 수 있습니다. 불변 객체 ( Immutable object ) - 불변객체는 생성 후에는 변하지 않는 object 로, 언제든 재사용이 가능합니다. - 불변객체의 불필요한 객체 생성을 막으려면 생성자보다는 static 팩토리 메소드를 사용하는 것이 좋습니다. ( Fa.. 2012. 2. 10.
[Design Pattern/Java] private 생성자를 사용해서 인스턴스 생성을 못하게 하자. 안녕하세요 돼지왕왕돼지입니다. 오늘은 private 생성자를 사용해서 인스턴스 생성을 못하게 하자. 라는 내용을 함께 알아보고자 합니다. 이 글은 "Effective Java" 를 기반으로 합니다. 언제 쓰는가? static method 와 static field 만을 모아 놓은 클래스를 만들 필요가 종종 있습니다. 예를 들자면, Utility class 들이 있죠, ( 대표적 ex) Math ) 이런 친구들은 인스턴스를 생성하지 못하게 설계되어야 합니다. 인스턴스 생성이 무의미하기 때문이죠. 왜 그렇게 해야 하는가? 생성자가 없을 경우 컴파일러는 기본적으로 default constructor 를 생성합니다. 고로 Compiler 덕에 생성가능한 객체가 됩니다. 간혹 abstract class 로 만들어.. 2012. 2. 10.
[Design Pattern/Java] private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. 안녕하세요 돼지왕왕돼지입니다. 오늘은 private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. 라는 내용을 함께 보고자 합니다. 이 글은 "Effective Java"의 내용을 기반으로 하였습니다. 싱글톤 ( Singleton )? 싱글톤 ( Singleton ) 은 시스템이나 어플리케이션에 정확히 하나의 인스턴스만 유지되는 클래스를 말합니다. 이런 싱글톤은 본질적으로 유일한 시스템 컴포넌트를 나타냅니다. ( ex) 윈도우 매니저, 파일 시스템 ) 싱글톤을 구현하는 기본적인 방법 1. public class Elvis{ public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } } 싱글톤을 구현하는 기본적인 방법 .. 2012. 2. 10.
[Design Pattern/Java] 생성자의 매개변수가 많을 때는 빌더(Builder) 를 고려하자. 안녕하세요 돼지왕왕돼지입니다. 오늘은 생성자의 매개변수가 많을 때 빌더 사용을 고려하자는 내용을 살펴보려고 합니다. 해당 글은 "Effective Java" 라는 책을 정리한 내용입니다. 매개변수가 많을 때 무엇이 문제가 되는가? Static Factory Method 와 Constructor 의 공통적인 제약사항은 선택 가능한 매개변수가 많아질 경우 신축성 있게 처리하지 못한다는 문제가 있습니다. 모든 매개변수를 다 입력해야 한다면 상관 없지만, 몇개는 꼭 입력해야 하고 몇개는 선택해서 입력할 수 있는 경우를 말합니다. 해결책 1 : 텔레스코핑 생성자 ( Telescoping Constructor ) - 특징 : 매개변수 수를 달리하는 Constructor 들을 여러개 만들어 this( a, b, de.. 2012. 2. 10.
[DesignPattern] Design Pattern에서 성능 향상에 Critical한 Cache Management Pattern에 대해 파헤쳐 봅시다. 0. History - 이 글은 2012-01-23 초안 작성 시작하였습니다. - 오래된 정보, 잘못된 정보, 오타가 있으면 Comment 남겨주세요. 확인 후 수정 하겠습니다. - 이 글은 2012-01-23 초안 작성 완료하였습니다. 1. Information Cache Management Pattern 이 뭔지 설명해주세요? Cache 의 정의를 먼저 간단히 짚고 넘어가 보죠. Cache 라는 것은 자주 사용하는 것들을 가까이(?) 두어 빠르게 접근 할 수 있도록 하는 것이죠. Memory 관점에서 볼 때, CPU 에서 Memory 에 접근하는 것이 Hard Disk를 접근하는 것보다 빠르죠? 이와 같은 맥락으로 CPU와 Memory 사이에도 L1 Cache, L2 Cache 라는 memory sp.. 2012. 1. 23.
[Java Design Pattern] 생성자 대신 static factory method를 사용해보자. 1. Prerequisite & Reference [Tutorial] 디자인 패턴이 뭔가요? 왜 필요한가요? 2. Information Static Factory Method 가 뭔가요? 일반적으로 객체를 생성할 때는 생성자 ( Constructor ) 을 이용하죠? Object object = new Object(); 와 같이.. Static Factory Method 는 public static method 로서 외부 클래스에서 바로 접근할 수 있는 method 로, 생성자의 역할을 하는 녀석입니다. Static Factory Method 를 쓰면 뭐가 좋은데요? 1. 생성자와는 달리 자기 나름의 이름을 가질 수 있습니다. 생성자는 Class 이름밖에 못 갖습니다. 예를 들어 Blog 라는 클래스를 .. 2012. 1. 10.
반응형