[OS] 객체지향(OOP) 이란?
1. 절차지향 프로그래밍
- 절차지향언어는 개체를 순차적으로 처리하여 프로그램 전체가 유기적으로 연결되어야 함
- ( 파스칼, 코볼, 포트란, C언어 등)
2. 객체지향 프로그래밍
- 객체 단위로 데이터와 함수를 하나로 묶어서 쓰는 언어
2.1. 상속성
- 상위클래스에 근거하여 새로운 클래스와 행위를 정의
2.2. 다형성
- 상속을 통해 기능을 확장하거나 변경하는 것
- 코드의 재사용
- 코드길이 감소가 되어 유지보수가 용이
2.3. 오버라이딩
- 상위클래스에서 만들어진 메소드를 재창조하여 사용
2.4. 오버로딩
- 메소드 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르게 쓰이는 경우
2.5. 추상화
- 큰 틀의 클래스를 구현하고 공통적인 요소나 필수적인 요소가 들어가는 것
2.6. 캡슐화
- 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것
2.7. 정보은닉
- private : 해당 클래스만 접근 가능
- protected: 해당 클래스 or 해당 클래스를 상속받은 클래스에서 접근 가능
- public: 어떤 클래스라도 접근 가능
2.8. 다른 특징들
- Static method: self(this)를 갖고 있지 않고 데이터영역 메모리에 올라감, 객체없이 사용 가능하다는 의미
- Instance method: 호출된 객체에서 접근 가능(클래스 멤버 함수)
| 인터페이스 | 추상클래스 | | — | — | | 클래스가 아님 | 클래스 | | 클래스와 관련이 없음 | 클래스와 관련이 있음 (Base 클래스로 사용) | | 한 개의 클래스에 여러개 사용 가능 | 한 개의 클래스에 여러 개 사용 불가능 | | 구현 객체의 같은 동작을 보장하기 위한 목적 | 상속 받아서 기능을 확장시키는 데 목적 |
- Composition(포함)
- 다른 클래스의 일부 기능을 그대로 이용하고 싶으나, 전체 기능 상속은 피하고 싶을 때 사용
- 상속 관계가 복잡할 경우, 코드 이해가 어려운 경우가 많음
- composition = 명시적 선언, 상속 = 암시적 선언
3. S.O.L.I.D
3.1. SRP(Single Responsibility Principle)
- 단일 책임 원칙: 클래스는 단 한 개의 책임을 가져야 함
- 예시
- class StudentScoreAndCourceManager() → 나쁜 예
- class ScoreManager, CourseManager→ 변경
3.2. OCP(Open Closed Principle)
- 개방 - 폐쇄 원칙: 확장에는 열려있고, 변경에는 닫혀있어야 함
- method override
- 행동 구현은 부모클래스의 자식 클래스에서 재정의해서 사용
- 부모클래스는 수정할 필요 없고(변경에 닫힘), 자식클래스에서 재정의 (확장에 대한 개방)
3.3. LSP(Liskov Substitusion Principle)
- 리스코프 치환 원칙: 자식 클래스는 언제나 자신의 부모클래스와 교체할 수 있어야 함
- 갤럭시 is a kind of 스마트폰
- 스마트폰 → 통화, 인터넷, 앱 다운 기능
- 갤럭시 → 통화, 인터넷, 앱 다운 기능
3.4. ISP(Interface Segregation Principle)
- 인터페이스 분리 원칙: 클래스에서 상관없는 메소드는 분리해야 함
3.5. DIP(Dependency Inversion Principle)
- 의존성 역전 법칙: 부모클래스는 자식클래스의 구현에 의존하면 안됨
-
예시
# 나쁜 예 class BubbleSort class SortManager: def __init__(self): self.sort_method = BubbleSort() # 의존적 # 좋은 예 class SortManager: def __init__(self, sort_method): # (DI)의존성을 주입시킨다고 하는 것 self.set_sort_method(sort_method) def set_sort_method(self, sort_method): self.sort_method = sort_method def begin_sort(self): self.sort_method.sort() # 하부 클래스가 바뀌더라도, 동일한 코드 활용 가능토록 인터페이스화
- 추가적으로 리팩토링을 위한 중복코드 제거, 최적화는 제일 나중에 할 것
참고
This is personal diary for study documents.
Please comment if I'm wrong or missing something else 😄.
댓글남기기