출처 : 디자인 패턴에 뛰어들기 - 알렉산더 슈베츠 도서
OOP 란?
객체 지향 프로그래밍(Object Oriented Programing)을 의미한다.
이는 데이터 조각들 및 해당 데이터와 관련된 행동들을 객체라는 묶음으로 집합 및 틀 또는 체계라는 개념을 가지고 있다.
이 객체들이 집합하여 프로그래머가 정희하는 집합 구성체가 바로 클래스이다.
객체와 클래스들
아래 고양이 예시 그림을 통해 OOP의 개념을 이해해보자.
그림 예제-1)
위 그림은 UML 클래스 다이어그램이며, 이해한 내용을 아래와 같이 정리해보았다.
- 상단에는 클래스명을 의미한다.
- 중단에는 필드들(변수)를 의미한다.
- 필드명 앞단의 "+" 의 의미는 공개(pubilc)를 의미한다.
- 필드명 앞단의 "-" 의 의미는 비공개(private)를 의미한다.
- tip) "+ name : const char*"로 변수 타입까지 표시하는 경우도 존재한다.
- 하단에는 메서드들(함수)를 의미한다.
- 메서드명 앞단의 "+" 의 의미는 공개(pubilc)를 의미한다.
- 메서드명 앞단의 "-" 의 의미는 비공개(private)를 의미한다.
- 파라미터(인자) 값도 추가하여 표시하는 경우가 많다.
- tip) "+ void breathe()"로 메서드 타입까지 표시하는 경우도 존재한다.
- 상속 관계 UML 클래스 다이어그램 표시 예제 코드
// 상속 관계 UML 코드이다. class B { +doSomething() } class A { +doSomethingElse() } B <|-- A //상속 연결 // 클래스 A가 클래스 B를 상속받아 B의 기능을 확장하는 것을 의미한다. // 이는 main 함수에서 객체 A를 생성하고, // doSomething과 doSomethingElse 메소드를 호출하여 // 상속된 메소드와 확장된 메소드를 실행합니다
그림 예제-2)
위 그림을 보고, 이해한 내용을 아래와 같이 정리해보았다.
- 만약 이름이 "Khadra"이라는 고양이가 존재하는 경우
이를 Khadra는 객체로, Cat 클래스의 인스턴스로 비유할 수 있다. - 각 고양이는 이름, 성별, 나이, 체중, 색깔 등 일반적인 속성들을 갖고 있으며,
이를 클래스의 필드들로 비유할 수 있다. - 모든 고양이는 숨쉬기, 먹기, 뛰기, 잠자기 등 행동 및 상태들을 갖고 있으며,
이를 클래스의 메서드로 비유할 수 있다.
클래스 계층 구조들
클래스에 관하여 이야기를 할 때에는 모든 것이 간단하고 명확하다.
대부분 실제 프로그램에는 하나 이상의 클래스가 포함되어 있지만, 일부는 클래스 계층구조로 구성될 수 있다.
지금부터 그것이 무엇을 의미하는지 이해해보자.
그림 예제-1)
위 그림은 클래스 계층 구조를 이해하기 위하여 '고양이'에 이어 '강아지'를 추가하여 설명한다.
이를 통해 이해한 내용을 아래와 같이 정리해본다.
- 고양이와 강아지 두 동물을 비교하였을 때 공톰점이 많다.
- 이름, 성별, 나이, 체중, 색깔, 숨쉬기, 먹기, 뛰기, 잠자기 등
- 공통점을 통해 Animal(동물) 클래스를 정의하여 상태(필드)와 행동(메서드)을 나열할 수 있다.
- 즉, Animal 클래스는 고양이와 강아지와 같은 동물 클래스들은 상위 클래스인 부모 클래스라고 한다.
- 부모 클래스 기준으로 하위 클래스들은 자식 클래스들이라고 한다.
- 자식 클래스들은 부모 클래스로부터 상태(필드)와 행동(메서드)들을 상속받는다.
- 부모 클래스와 다른 것들만 정의한다.
- Cat(고양이) 클래스는 meow(야옹) 행동(메서드)가 존재하게 된다.
- Dog(강아지) 클래스는 bark(멍멍) 행동(메서드)가 존재하게 된다.
- 부모 클래스와 다른 것들만 정의한다.
그림 예제-2)
위 그림은 계층구조를 표현한 그림이다. 이를 통해 이해한 내용을 아래와 같이 정리해본다.
- Organisms(모든 생명체) 클래스를 통해 더욱 일반적인 클래스를 추출할 수 있다.
- Organisms(모든 생명체) 클래스는 Animals(동물들) 및 Plants(식물들) 클래스에 대한 부모 클래스가 된다.
- 클래스들의 피라미드 구조가 바로 계층 구조임을 알 수 있다.
- 이러한 계층구조에서 Cat(고양이) 클래스는 Animal(동물) 클래스와 Organisms(모든 생명체) 클래스 양쪽 클래스의 모든 내용을 상속받는다.
- 자식 클래스들은 부모 클래스들에서 상속한 메서드들의 행동을 오버라이드할 수 있다.
- 자식 클래스들은 특정 기능을 향상시킬 수 있다.
- 기본(default) 행동들을 완전히 대체하거나 몇 가지 행동들을 추가할 수 있다.
- tip) 만약 클래스들의 내용보다 사이의 관계들을 표시하는 것이 더 중요한 경우
- UML 다이어그램의 클래스들을 단순화할 수 있다.
'Self-Dev > Design Patterns R&D' 카테고리의 다른 글
5] 디자인 패턴 소개 - 왜 패턴을 배워야 할까요? (0) | 2024.05.31 |
---|---|
[4] 디자인 패턴 소개 - 디자인 패턴이란? (0) | 2024.05.30 |
[3] 객체 지향 프로그래밍 소개 - 객체간의 관계 (0) | 2024.05.26 |
[2] 객체 지향 프로그래밍 소개 - OOP의 기둥들 (0) | 2024.05.26 |
"디자인 패턴에 뛰어들기" 도서를 통해 디자인 패턴의 개념을 배워본다. (0) | 2024.05.24 |