본문 바로가기

프로그래밍/초보자를 위한 Java프로그래밍

Thinking in JAVA 7. 클래스 재사용하기

반응형

컴포지션(composition) : 새 클래스에 기존 클래스의 객체를 생성 이를(composition)이라 하며, 형식이나 개념이 아닌 코드의 기능을 재사용하는 것이다.

  • lazy 초기화 : 그 객체를 실제로 사용하기 바로 직전에 초기화 한다. 이를 늦은 초기화라고 하며, 객체 생성에 시간이 많이 소요되거나, 객체가 매번 생성될 필요가 없는 경우에 부담을 줄일 수 있다.

상속(inheritance) : 새 클래스를 기존 클래스의 한 타입으로 만든다. 즉, 기존 클래스의 형태를 가져온 후 그것을 수정하지 않고 그 곳에 코드를 추가 한다.

  • 자바의 root 클래스인 Object를 암암리 상속 받음
  • extends시 상속받는 클래스의 베이스 클래스의 모든 필드와, 메소드를 자동으로 갖는다.

생성자오버로드, super 접근

위임(delegation) : 위임은 상속과 컴포지션의 중간 개념이다.

  • 컴포지션하여 파생클래스에서 해당 객체에 대한 베이스 클래스의 정보를 조작할 수 있는 메소드를 통하여 호출한다.

결과적으로 메소드를 통한 인터페이스는 상속과 통일하지만, 이처럼 위임 형태를 취하면 더 많은 제어가 가능하다.

상속과 관련된 객체의 클린업

  • 소멸자 : C++에서는 있지만 자바에는 없다. 하지만 가비지 컬렉터가 언제 호출될지 알 수 없으므로, 무언가 클린업을 해야 하는 특별한 메소드를 우리가 작성해야 한다. 베이스 클래스에 생성되는 클래스에 대해 dispose() 하는 메소드를 작성하여,

베이스 클래스가 종료되는 시점 finally 에 컴포지션된 클래스를 dispose() 시킨다.

업케스팅 : 상속의 가장 중요한 관점이 새 클래스를 위한 메소드 제공은 아니다. 새 클래스와 베이스 클래스 간의 관계를 나타내는 것이다. 이러한 관계는 다음과 같이 요약해서 말할 수 있다. 즉, '새 클래스는 기존 클래스의 한 가지 타입이다.'

파생클래스의 객체가 베이스 클래스 타입으로 변환되는 것을 업 캐스팅이라 한다.

업 케스팅은 항상 안전하다. (데이터 손실이나 메소드 호출의 모호함과 같은 문제가 생기지 않는다.) 특화된 타입을 일반적인 타입으로 바끼기 때문이다.

파생 클래스는 베이스 클래스의 전체 집합이다. 파생 클래스는 베이스 클래스보다 더 많은 메소드나 필드를 가질 수 있다. 따라서 업 케스팅일시 전체집합에서 부분집합의 범위로만 가능하기 때문에, 업 케스팅은 항상 안전하다고 할 수 있다.

final 키워드

static 이면서 final인 필드는 클래스에서 하나만 존재하는 상수 필드를 나타낸다.

final 메소드

설계상의 이유로 상속을 할 때 상속되는 메소드를 그대로 사용하도록 하기 위해 메소드 오버라이딩을 못하게 하고자 하는것

final 클래스

클래스로부터의 상속을 원하지 않거나 못하게 하겠다는 이야기. 보안성을 위해 상속을 못하게 하거나 어더한 경우에도 변경 할 필요 없을때.

반응형