절차적 프로그래밍은 프로그램을 명령어의 순서로 바라보지만, 객체 지향 프로그래밍(OOP)은 프로그램을 여러 개의 독립된 객체들의 상호작용으로 본다.
객체 지향 프로그래밍은 현실 세계를 더욱 잘 반영하며, 코드의 재사용성과 유지보수성을 높이는 데 중점을 둔다.
이번 글에서는 객체 지향 프로그래밍의 특징인 추상화, 캡슐화, 상속, 다형성에 대해 알아보자.
캡슐화(Encapsulation)
- 변수와 함수를 하나의 단위로 묶는 것을 의미한다.
- 대체로 클래스를 통해 구현된다.
정보 은닉
- 프로그램의 내부 구현을 외부에 드러나지 않도록 감추는 것을 의미한다.
- 외부로의 노출을 최소화함으로써 모듈간의 결합도를 떨어뜨려 유연함과 유지보수성을 높인다.
- 클래스 외부에서는 노출된 특정 메소드에만 접근이 가능하다.
접근 제한자
public
: 클래스 외부에서 사용 가능protected
: 상속받은 자식 클래스까지 사용 가능default
: 같은 패키지에 있는 클래스들만 사용 가능private
: 클래스 내부에서만 사용 가능
상속(Inheritance)
- 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 의미한다.
- 상속하는 클래스는 '슈퍼 클래스', '부모 클래스' 등으로 부르고, 상속받는 클래스는 '서브 클래스', '자식 클래스' 등으로 부른다.
- 상속은 캡슐화를 유지하면서도 클래스의 재사용이 용이하게 해준다.
오버라이딩(overriding)
- 자식 클래스에서 부모 클래스의 기능의 일부분을 수정해서 사용하는 것을 의미한다.
다형성(Polymorphism)
- 기본적으로는 하나의 변수 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것을 말한다.
- ‘역할(인터페이스)’과 ‘구현’으로 세상을 구분한다.
- 클라이언트는 대상의 ‘역할’만 알면 된다.
- 클라이언트는 ‘구현’을 변경해도 영향을 받지 않는다.
- 예를 들어, 서울에서 부산까지 ‘비행기’를 타고 간다고 해보자.
- ‘대한항공’ 비행기를 탈 수도 있고, ‘부산항공’ 비행기를 탈 수도 있다.
- 클라이언트는 둘 중 어느 비행기를 타든 상관없이 부산에 도착할 수 있다.
- 자바 언어에서 다형성이라는 특징은 ‘오버라이딩’에서 두드러진다.
다형성의 본질
- 인터페이스의 구현 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
- 서버의 구현 기능을 변경하더라도 클라이언트에 영향을 끼치지 않는다.
다형성의 한계
- 인터페이스 자체가 변경되면 클라이언트, 서버 모두에 큰 변경이 발생한다.
- 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.
추상화(Abstraction)
- 사물(Object)의 공통적인 특징을 선별하여 단순화하는 것을 의미한다.
- ‘말티즈’와 ‘치와와’는 서로 다른 생명체이지만, ‘강아지(Dog)’라고 추상화할 수 있다.
- 말티즈와 치와와는 걷는다(move), 짖는다(howl)는 공통적인 특징을 갖고 있다.
추상화의 장점
- 공통적인 특징을 추상 클래스로 정의해 줌으로써 중복 코드를 줄일 수 있다.
객체 지향의 특징에는 다음 4가지가 있다.
- 캡슐화 : 변수와 함수를 하나의 단위로 묶는 것 (정보 은닉에 유리)
- 상속 : 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것
- 다형성 : 하나의 변수 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것
- 추상화 : 사물(Object)의 공통적인 특징을 선별하여 단순화하는 것
'Spring > Spring Framework' 카테고리의 다른 글
👌 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2024.06.12 |
---|