객체 지향 프로그래밍의 4가지 특징은 각각 캡슐화, 상속, 추상화, 다형성입니다.
1. 캡슐화 ( Encapsulation )
: 실제 구현 내용(필드,메소드) 일부를 외부에 숨기며 외부에서 직접 접근할 수 없도록 제한하는 것.
객체의 세부 구현을 숨기고, 사용자에게는 필요한 인터페이스만을 제공합니다.
우리는 알약 내부에 정확히 어떤 성분들이 들어있는지 알 수 없습니다. 그러나 이 알약을 먹으면 몸이 나아질 거라는 , 알약의 용도는 알고 있죠. 굳이 알약 내부에 든 모든 성분을 알지 않아도 우리는 용도를 알기 때문에 자연스럽게 사용하게 됩니다. 알약 입장에서는 굳이 자신이 어떤 성분들을 함유했는지 하나하나 꺼내보이지 않아도 되게 되는 것이겠고요. 캡슐 안의 내용물이 외부로부터 오염될 걱정 없이 안전하게 보호될 수도 있죠.
캡슐화를 사용하면, 객체 내부의 동작이 외부로 노출되는 것을 최소화하여 각 객체의 자율성을 높이며, 이를 통해 객체 간 결합도를 낮출 수 있게 됩니다.
이해를 돕기 위해 간단한 java 예시코드를 가져와 보았는데요 ! 핵심적인 부분만 함께 봐 주시기 바랍니다.
Driver 클래스의 입장에서는 Car 클래스의 정확한 내부 로직을 알지 못하고, 알 필요도 없습니다. 그저 Car 클래스의 operate 함수를 호출하여 사용할 뿐이죠. 내부 동작을 전혀 신경 쓰지 않고도요.
클래스 내에서 외부로 보여지는 일부 영역은 interface라 부르며, 우리가 자세히 알 수 없는 내막의 내용들은 body라고 부릅니다.
** Default Constructor
디폴트 생성자
: 클래스 내에 어떤 생성자도 정의하지 않았을 때, 컴파일러가 자동으로 클래스에 추가하는 기본 생성자. 디폴트 생성자의 주 목적은 객체를 생성할 때 기본적인 초기화를 제공하는 것. ( 0 혹은 null 처리 )
2. 상속 (inheritance)
: 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 문법.
super class - sub class
상위 클래스의 속성과 기능들을 하위 클래스에서 그대로 받아 사용할 수도 있고, 오버라이딩을 통해 선택적으로 재정의하여 사용할 수도 있다.
# Sub-class can take the place of super-class.
# A super-class cannot be placed in the place of a sub-class.
- 동적 바인딩의 특징
( 컴파일 타임이 아닌, 런타임에 수행됨 ! )
상속 관계에 있는 클래스에서 오버라이딩된 메소드에 대해, 참조 변수의 타입이 아닌, 실제 객체의 타입을 기준으로 어떤 메소드가 호출될지 결정합니다. 이를 통해 다형성을 실현합니다.
3. 다형성
: 상위 클래스 타입의 참조 변수로 그것과 관계있는 하위 클래스들을 참조할 수 있는 능력.
+ 오버로딩, 오버라이딩 모두 다형성의 예시.
( 모습은 같은데 역할은 다른. )
4.
추상 클래스 = 미완성 설계도 ( 완성된 부분도 있고, 아직 그려지지 않은 부분도 있음.)
미완성 부분(추상 메소드)은 하위 클래스가 완성해야 함.
한 클래스는 한 추상 클래스만 상속받을 수 있음.
인터페이스 = 필수 기능 목록
모든 메소드는 기본적으로 구현되지 않은 상태.
'소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] CRC(Class, Responsibility, Collaboration) card (47) | 2024.04.24 |
---|---|
[소프트웨어공학] 클래스 다이어그램 (Class Diagram) (50) | 2024.04.24 |