본문 바로가기

카테고리 없음

Thinking in JAVA 8. 다형성

반응형

다형성(polymorphism)은 데이터 추상화(abstraction)와 상속(inheritance)에 이어 객체지향의 세 번째 필수적인 특성이다.

what과 how의 분리를 위해 다형성은 인터페ㅔ이스와 구현을 분리시켜준다.

캡슐화(encapsulation)는 특성과 행동을 결합하여 새로운 데이터 타입을 만드는 개념이다. 구현 은닉(implementation hiding)은 내부의 상세한 것을 private으로 하여 인터페이스와 구현을 분리한다.

그러나 다형성은 type의 관점으로 분리를 한다. 동일한 타입의 여러 클래스들이 갖는 인터페이스 관점에서 분리를 다룬다. 상속을 이용하면 객체를 자신의 타입 또는 베이스 타입으로 처리할 수 있다는 것을 배웠다. 이런 기능이 중요한 이유는 여러 타입(같은 베이스 타입으로부터 파생된)들을 마치 하나의 타입인 것처럼 처리할 수 있으므로, 서로 다른 타입에서 특정 코드를 동일하게 실행할 수 있기 때문이다. 그리고 다형적(polymorphic) 메소드 호출을 사용하면 하나의 타입에서 자신만의 다른 특성(같은 베이스 타입에서 파생된 다른 타입과 차이가 있는)을 표현할 수 있다. 그러고 그러한 차이점의 표현은 베이스 클래스를 통해서 호출할 수 있는 메소드가 달라짐으로써 가능해 진다.

메소드 호출 바인딩

실제 실행할 메소드 코드와 호출하는 코드를 연결시키는 것을 바인딩(binding)이라 한다. 프로그램이 실행되기 전에 즉, 컴파일러나 링커에 의해서 바인딩되는 것을 early 바인딩 또는 정적(static) 바인딩이라고 한다.

late 바인딩은 동적 바인딩 또는 런타임 바인딩이라고 하며 이는 실행할 당시에 객체 타입으로 기준으로 바인딩 되는 것을 말한다.

private 메소드는 오버라이딩은 안된다.

필드와 static 메소드는 다형적이지 않다.

생성자의 호출 및 실행 순서
  1. 제일 밑에 파생 클래스로부터 상속 구조를 따라 올라가면서 최상위의 베이스 클래스 생성자 까지 호출. 따라서 생성자를 실행하는 순서는 이와는 반대가 된다. 즉, 최상위 베이스 클래스의 생성자가 먼저 실행되고, 상속 구조를 따라 내려가면서 그 다음 파생 클래스의 순서로 차례대로 실행된다.
  2. 소스 프로그램에 정의된 순서대로 멤버 초기화가 진행된다.
  3. 생성되는 객체의 생성자 몸체(실행 부분)에 있는 나머지 코드가 실행된다.
상속과 클린업

가비지 컬렉터가 알아서 하기 때문에 클린업을 따로 할필요는 없지만 하게 된다면 dispose()를 이용하여 클린업 시킨다.

반응형