구로디지털단지역 오엔제이프로그래밍
실무학원
(Java , Oracle, SQL, Oracle Tuning,
BackUP& Recovery, ASP.NET, C#, C#Network ,채용확정
무상교육)
| private 생성자 종종 static 메소드와 static 필드 만으로 이루어진 클래스를 만들어야 되는 경우가 있습니다. 객체 지향 프로그래밍을 할 때 이러한 것들이 좋지 않게 보여 질 수 있지만 다 나름대로 이유가 있습니다. java.lang.Math나 java.util.Arrays 처럼 기본 타입의 값이나 배열을 처리하는 메소드를 모아 두거나 java.util.Collection처럼 특정 인터페이스를 구현한 클래스들을 처리하는 메소드를 모아두는 경우가 있습니다. final 클래스에 새로운 메소드를 추가 할 때 이 클래스를 확장 하는 것 보다 추가할 메소드들을 static 메소드로 모아 놓은 새로운 클래스를 만드는 것이 더 좋습니다. 이러한 Utility 클래스들은 처음부터 인스턴스를 생성 하지 못하도록 설계되었을 것입니다. 하지만 한가지 꼭 기억할 부분은 생성자를 만들어 놓지 않으면 자바 컴파일러가 자동으로 기본 생성자인 인자 없는 public 생성자를 만든다는 것입니다. 이렇게 자동으로 만들어진 생성자 역시 사용자 입장에서 보면 일반 생성자와 똑 같다는 것입니다. 그렇다면 외부에서 인스턴스를 만들지 못하게 하는 방법은 무엇일까요? 추상클래스로 만들면 new 하지 못하므로 인스턴스를 만들지 못할 거라고 생각하지만 이 추상클래스를 상속받아 하위 클래스를 만들면 이 하위클래스의 인스턴스를 만들수 있으므로 이것 또한 적절한 방법은 아닙니다.(하위클래스는 완벽한 상위클래스임) 방법은 private 생성자를 만들어 두는 것입니다. public class Test { private Test() {} //이 생성자는 호출되지 않습니다. } 이러한 생성자는 절대 외부에서 호출될 수 없으며 인스턴스가 절대 생겨날 수 없지만 이러한 구현 패턴은 다른 클래스가 이 클래스를 상속받지 못한다는 단점이 있습니다. (모든 하위 클래스는 생성될 때 명시적으로 상위 클래스의 생성자를 호출하는 super()를 기술하지 않으면 자동으로 상위 클래스의 생성자를 호출 합니다.) |
댓글 없음:
댓글 쓰기