2026-02-18
객체지향 프로그래밍(OOP)
객체지향 프로그래밍(OOP)이란?
- 현실 세계의 개념을 객체(Object) 단위로 모델링하여 프로그램을 구성하는 방식
- 프로그래밍에서 필요한 데이터를 추상화시켜서 상태(속성, 어트리뷰트)와 행위(메서드)를 가진 객체로 만들고, 그 객체간의 상호 작용을 통해 로직을 구성하는 방법
객체지향 4대 특징 - 캡슐화 (Encapsulation)
데이터와 메서드를 하나로 묶고, 외부에서 직접 접근하지 못하도록 보호하는 것
- 접근제어자 (private, protected, public)
- 정보 은닉 (Information Hiding)
왜 중요한가?
- 객체 내부 구현을 숨겨 변경에 유연함
- 외부에서 잘못된 값 변경 방지
- 유지보수성 향상
- 객체의 무결성 보장
한줄 요약
캡슐화는 객체의 상태를 외부에서 직접 수정하지 못하도록 보호하여
객체의 무결성을 보장하고, 변경에 유연한 구조를 만들기 위한 개념입니다.
객체지향 4대 특징 - 추상화 (Abstraction)
불필요한 세부사항은 숨기고 핵심 기능만 노출하는 것
- 인터페이스
- 추상 클래스
왜 필요한가?
- 복잡도 감소
- 구현체 교체 용이
- 확장성 증가
예시
interface Payment {
void pay();
}
카카오페이, 카드결제, 네이버페이 등 구현체는 달라도 외부에서는 pay()만 사용
요약
추상화는 공통 기능을 인터페이스로 정의하여
구현을 분리함으로써 확장성과 유연성을 높이는 설계 방식입니다.
객체지향 4대 특징 - 상속 (Inheritance)
기존 클래스를 재사용하여 새로운 클래스를 만드는 것
장점
- 코드 재사용
- 중복 제거
단점
- 결합도 증가
- 잘못 사용하면 유지보수 어려움
- 상속보다 합성(Composition)을 권장하는 경우 많음
요약
상속은 코드 재사용의 장점이 있지만,
강한 결합을 만들 수 있어 최근에는 합성을 더 선호합니다.
객체지향 4대 특징 - 다형성 (Polymorphism)
하나의 인터페이스로 여러 객체를 다룰 수 있는 성질
- 오버로딩 (컴파일 타임 다형성)
- 오버라이딩 (런타임 다형성)
핵심
- 부모 타입으로 자식 객체 참조 가능
- 동적 바인딩
예시
Payment payment = new KakaoPay();
payment.pay();
요약
다형성은 동일한 인터페이스를 통해 서로 다른 구현체를
유연하게 교체할 수 있도록 하는 객체지향의 핵심 개념입니다.
객체지향 장점/목적
- 유지보수성 향상
- 확장성 증가
- 재사용성 증가
- 변경에 강한 구조 설계
↔ 단점
- 처리 속도가 상대적으로 느림
- 객체가 많으면 용량 커짐
- 설계 시 많은 노력과 시간 필요
객체지향 설계 원칙 (SOLID)
- 단일 책임 원칙(Single Responsibility Principle): 한 클래스는 하나의 책임만을 가져야 한다.
- 개방-폐쇄 원칙(Open/Closed Principle): 클래스는 확장에 대해서는 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. (클래스를 수정하려면 상속/확장하여 수정)
- 리스코프 치환 원칙(Liskov Substitution Principle): 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상 동작 해야 한다. (자식 클래스 사용중일때 부모 클래스로 치환해도 문제없어야함)
- I: 인터페이스 분리 원칙(Interface Segregation Principle): 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다.
- D: 의존성 역전 원칙(Dependency Inversion Principle): 상위 클래스가 하위 클래스에 의존하면 안된다.
참고자료
- https://velog.io/@wjj329/24.04.02-%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-20.-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EC%A7%80-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94
- https://mjoo1106.tistory.com/23
- https://jaehyuuk.tistory.com/197
- https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95
- https://dochistory.tistory.com/154