일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- .net maui
- C++
- mysql
- maui
- sql
- asp.net core
- .NET
- docker-compose
- 정렬
- asp.net
- BFS
- 도커
- Merge Sort
- 재귀
- API
- .net core
- 시간복잡도
- 탐색
- 파이썬
- 스택
- 자료구조
- dfs
- C#
- 백준
- 알고리즘
- quick sort
- REDIS
- Docker
- 큐
- Get
- Today
- Total
코젤브
OPP 객체 지향 프로그래밍 특징과 원칙 본문
객체지향 프로그래밍의 특징, A PIE
OPP is A PIE 라고도 부르는..
1. Abstraction 추상화
실제로 존재하는 사물(객체)의 공통된 특징을 묶어 하나의 클래스로 정의하는 것
2. Polymotphism 다형성
하나의 객체가 여러 형태(타입)을 가질 수 있는 성질
- 여러 종류의 객체를 하나의 배열로 다룰 수 있음
- 메서드의 매개변수로 여러 타입의 객체를 받아올 수 있음
- 메서드의 오버로딩, 오버라이딩을 통해 같은 모양의 메서드가 여러 다른 기능을 할 수 있음
3. Inheritance 상속
클래스를 재사용하여 새로운 클래스를 정의하는 것
4. Encapsulation 캡슐화
클래스 내부의 멤버 변수와 메서드를 하나의 캡슐로 만들어서 외부로부터 보호하는 것
정보를 은닉, 접근제어자를 이용해 차단
객체지향 프로그래밍 5가지 설계 원칙, SOLID
- SRP(단일 책임 원칙) : Single Responsibility Principle
: 모듈이 변경되는 이유가 한가지여야 함
해당 모듈이 여러 대상 또는 액터에게 책임을 가져서는 안되고, 오직 하나의 액터에 대해서만 책임을 져야 한다는 것
만약 어떤 모듈이 여러 액터에 대해 책임을 가지고 있다면 여러 액터들로부터 변경에 대한 요구가 올 수 있으므로, 해당 모듈을 수정해야 하는 이유 역시 여러 개가 될 수 있다.
반면에 어떤 모듈이 단 하나의 책임 만을 갖고 있다면, 특정 액터로부터 변경을 특정할 수 있으므로 해당 모듈을 변경해야 하는 이유와 시점이 명확해진다. (참고로 여기서 모듈이라 함은 클래스 혹은 클래스의 모음 등으로 해석 가능)
단일 책임 원칙을 제대로 지키면 변경이 필요할 때 수정할 대상이 명확해짐
- OCP(개방-폐쇄 원칙) : Open-Closed Principle
: 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다는 원칙
- 확장에 대해 열려 있다: 요구사항이 변경될 때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있다.
- 수정에 대해 닫혀 있다: 기존의 코드를 수정하지 않고 애플리케이션의 동작을 추가하거나 변경할 수 있다.
개방 폐쇄 원칙을 지키기 위해서는 추상화에 의존해야 함
추상화를 통해 변하는 것들은 숨기고 변하지 않는 것들에 의존하게되면 기존 코드 및 클래스를 수정하지 않은 채로 애플리케이션을 확장할 수 있다.
- LSP(리스코프 치환 원칙) :Liskov Substitution Principle
: 하위 타입은 상위 타입을 대체할 수 있어야 한다.
해당 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야 한다는 것
자식 클래스가 부모 클래스를 대체하기 위해서는 부모 클래스에 대한 클라이언트의 가정을 준수해야한다.
대체 가능성을 결정하는 것이 해당 객체를 이용하는 클라이언트 임을 반드시 잊지 말기!
- DIP(의존 역전 원칙) : Dependency Inversion Principle
: 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되며, 저수준 모듈이 고수준 모듈에 의존해야 한다는 것
- 고수준 모듈 : 입력과 출력으로부터 먼 (비즈니스와 관련된) 추상화된 모듈
- 저수준 모듈 : 입력과 출력으로부터 가까운 (HTTP, 데이터베이스, 캐시 등과 관련된) 구현 모듈
비즈니스와 관련된 부분이 세부 사항에는 의존하지 않는 설계 원칙을 의미
- ISP(인터페이스 분리 원칙) : Interface segregation principle
: 목적과 관심이 각기 다른 클라이언트가 있다면, 인터페이스를 통해 적절히 분리해줄 필요가 있다
클라이언트의 목적과 용도에 적합한 인터페이스만 제공하는 것
모든 클라이언트가 자신의 관심에 맞는 퍼블릭 인터페이스(외부에서 접근 가능한 메세지)만을 접근하여 불필요한 간섭을 최소할 수 있음
참고 자료