객체지향 프로그래밍이란?
- 프로그래밍 패러다임. 프로그래밍을 하는 여러가지 방식 중 객체를 컨셉으로 해서 프로그래밍을 해나가는 방식.
- 명령형 프로그래밍: 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임
- 절차적 프로그래밍
- 객체 지향 프로그래밍
- 선언형 프로그래밍
- 함수형 프로그래밍
- 명령형 프로그래밍: 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임

절차적 VS 객체 지향 ?
- 절차적 프로그래밍과 객체 지향 프로그래밍을 비교해서 많이 이야기하지만 둘은 반대되는 개념이 아니다.
- 절차적 프로그래밍은 프로그램의 실행 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식이고, 객체지향 프로그래밍은 반대로 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행 순서와 흐름을 짜는 방식이다.
- 결론적으로 둘 다 실행 순서와 흐름에 따라 설계하는 방식
장단점 비교
| 패러다임 | 장점 | 단점 |
| 절차적 | 컴퓨터 처리구조와 유사하여 실행 속도가 빠름. | 실행순서가 정해져 있어 코드 순서가 바뀌면 동일한 결과를 보장 못함. 디버깅이 어려워 유지보수가 어려움. |
| 객체 지향 | 프로그램 신뢰성이 높아짐. 코드 재사용이 쉬워짐. 업그레이드 쉬움. 디버깅이 쉽고, 직관적인 코드 분석 가능. |
처리 속도가 절차적 프로그래밍보다 느림. 설계에 많은 시간이 듦. |
객체란?
- 객체지향 프로그래밍에서 객체는 클래스의 인스턴스
클래스란?
- 클래스는 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
- 클래스는 필드(상태)와 메소드(동작)로 구성된다.

출처: https://cloudstudying.kr/lectures/200
- 클래스는 객체를 만들기 위한 템플릿, 클래스에 실제 데이터를 넣어 실제로 메모리상에 할당한 것이 객체
- 예를 들면, 어떤 사람이 집에서 살기를 원할 때, 그 집의 청사진(집의 설계도)이나 축소 모형 따위는 전혀 필요가 없다. 필요한 것은 설계에 맞는 실제 집이다. 이 비유에서 청사진은 클래스를, 실제 집은 객체를 나타낸다.
객체 지향 프로그래밍의 4가지 특징
캡슐화, 추상화, 상속, 다형성
캡슐화(Encapsulation)

출처: https://radait.tistory.com/5
관련 있는 변수와 함수들을 하나의 단위로 묶는 것.
접근 제한자를 사용해서 외부에 보일 필요가 없는 데이터를 숨겨 놓는 것
- 접근 제한자 종류(TS, java)
- public: 클래스의 외부에서 사용 가능
- protected: 상속 받은 자식 클래스에게만 노출됨
- private: 클래스의 내부에서만 사용
추상화(Abstraction)

출처: https://radait.tistory.com/5
외부에서는 내부가 어떻게 구현되어 있는지 신경쓰지 않고 외부에 공개된 인터페이스를 이용해서 객체를 사용할 수 있게 하는 것
- TS에서 'interface'와 연관 있는 개념이다.
상속(Inheritance)
자식 클래스가 부모 클래스의 특성과 기능을 물려 받는 것
- TS에서 'extends'나 'implements'를 통해 상속을 구현한다.
다형성(Polymorphism)
하나의 인터페이스를 이용하여 서로 다른 구현을 제공하는 것
- (예시) 동일한 interface를 상속해 만든 class라면 동일한 메소드 명으로 조금씩 다른 기능을 하는 함수를 호출할 수 있다.
- 오버라이딩(Overriding): 자식 클래스에서 상속 받은 상위 클래스의 기존 메소드를 재정의하는 것. 메소드명, parameter, 리턴 타입이 모두 같아야 한다.
- 오버로딩(Overloading): 메소드명이 같지만 parameter가 다른 메소드.
객체 지향 프로그래밍 5원칙: SOLID
<Clean Code>의 저자, 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것
Single Responsibility Principle: 단일 책임 원칙
Open-Closed Principle: 개방-폐쇄 원칙
Liskov Substitution Principle: 리스코프 치환 원칙
Interface Segregation Principle: 인터페이스 분리 원칙
Dependency Inversion Principle: 의존성 역전 원칙
- 단일 책임 원칙(SRP, Single Responsibility Principle)
- 객체는 오직 하나의 책임(기능)을 가져야 한다. 이는 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다는 것.
- 개방-폐쇄 원칙(OCP, Open-Closed Principle)
- 객체는 확장에는 열려 있고, 변경에는 닫혀있어야 한다. 기존 구성요소는 수정이 일어나지 말아야 하며, 기존 구성요소를 쉽게 확장해서 재사용할 수 있어야 한다.
- 리스코프 치환 원칙(LSP, Liskov Substitution Principle)
- 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙이다.
- 인터페이스 분리 원칙(ISP, Interface Segregation Principle)
- 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다.
- 의존성 역전 원칙(DIP, Dependency Inversion Principle)
- 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
참고자료
- https://ko.wikipedia.org/wiki/객체_지향_프로그래밍
- https://cloudstudying.kr/lectures/200
- https://m.blog.naver.com/atalanta16/220249264429
- https://velog.io/@seod0209/TIL-30.-OOPObject-Oriented-Programming-객체지향프로그래밍-개념
- https://coderzero.tistory.com/entry/프로그램-기타-객체-지향-프로그래밍Object-Oriented-Programming-OOP
- https://www.nextree.co.kr/p6960/
- https://ko.wikipedia.org/wiki/SOLID_(객체_지향_설계)
- https://academy.dream-coding.com/courses/typescript
'웹개발 상식' 카테고리의 다른 글
| [Generic] 제네릭 개념 (0) | 2021.08.08 |
|---|