The 4 Basic Concepts of OOP

객체지향의 4대 특성에 대해서 알아보자.

About

🥬 캡! 상추다!라고 불리기도 한다...

- 스프링 입문을 위한 자바 객체지향의 원리와 이해

캡슐화

상속

  • extends

추상화

다형성

오버로딩

오버라이딩

업캐스팅

부모 클래스 타입으로 선언된 변수에 자식 클래스의 인스턴스를 할당하는 것.

Lecture lecture = new GradeLecture("알고리즘", 70);

업캐스팅은 서로 다른 클래스의 인스턴스를 동일한 타입에 할당하는 것을 가능하게 한다. 따라서 부모 클래스의 코드를 전혀 수정하지 않고도 자식 클래스에 적용할 수 있게 해준다.

반대로 부모 클래스의 인스턴스를 자식 클래스 타입으로 변환하기 위해서는 명시적인 타입 캐스팅이 필요하다. 이를 다운캐스팅(downcasting)이라고 한다.

Lecture lecture = new GradeLecture("알고리즘", 70);
GradeLecture gradeLecture = (GradeLecture) lecture;

동적 바인딩 / 지연 바인딩 (Dynamic Binding / Late Binding)

선언된 변수의 타입이 아니라 메시지를 수신하는 객체의 타입에 따라 실행되는 메서드가 결정되는 것.

메시지를 처리할 적절한 메서드를 컴파일 타임이 아닌 실행 시점에 결정하기 때문에 가능하다.

동적 메서드 탐색은 부모 클래스의 타입에 대해 메시지를 전송하더라도 실행 시에는 실제 클래스를 기반으로 실행될 메서드가 선택되게 해준다. 따라서 코드를 변경하지 않고도 실행되는 메서드를 변경할 수 있다.

동일한 수신자에게 동일한 메서드를 전송하는 동일한 코드를 이용해 서로 다른 메서드를 실행할 수 있는 이유는 업캐스팅과 동적 메서드 탐색이라는 기반 메커니즘이 존재하기 때문이다.

업캐스팅과 동적 메서드 탐색은 코드를 변경하지 않고도 기능을 추가할 수 있게 해주며, 이는 OCP의 의도와 일치한다.

반대로 컴파일 시점에 호출할 함수를 결정하는 방식을 정적 바인딩 / 초기 바인딩 / 컴파일타임 바인딩 (Static Binding / Early Binding / Compile-time Binding)

Last updated