[기술 질문]#9_객체 지향 프로그래밍(OOP)

2023. 2. 12. 14:34· 언어/기술 질문
목차
  1.  
  2. [기술 질문] #9_객체 지향 프로그래밍(OOP)

 

[기술 질문] #9_객체 지향 프로그래밍(OOP)

 

객체 지향 프로그래밍에 대해 알아보겠습니다.

 


 

Overview

 

  1. 개념
  2. 네 가지 특성
  3. 다섯 가지 원칙

 

#1. 개념

1. OOP??

  • 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 절차 지향적 시각에서 벗어나, 실세계에 존재하고 인지하는 "객체"를 소프트웨어 세계에서 표현하기 위해 객체의 핵심적인 개념과 기능만을 추출하는 추상화를 통해 모델링하려는 프로그래밍 패러다임을 의미합니다.

 

#2. 네 가지 특성

1. 캡슐화(Encapsulation)?

  • OOP의 캡슐화란 데이터와 코드의 형태를 외부로부터 은닉하고, 데이터의 구조와 역햘, 그리고 기능을 하나의 캡슐 형태로 만드는 방법입니다.
  • 예를 들면,  클래스의 private 접근 제어자 활용과 Getter&Setter 함수 활용을 통해 캡슐화가 가능합니다. 

 

2. 추상화(Abstraction)?

  • OOP의 추상화란 객체의 속성과 기능들을 추출해 한데 묶어놓는 작업을 의미합니다.
  • 클래스를 선언하는 것과 마찬가지로, 서로 다른 클래스들의 공통적인 특징등을 한데 묶어 해당 클래스들의 부모 클래스를 선언하는 작업 또한 추상화 작업입니다.

 

3. 상속(Inheritance)?

  • OOP의 상속은 상위 개념 혹은 클래스의 속성과 기능들을 하위 개념의 클래스가 물려받는 것을 의미합니다.

 

4. 다형성(Ploymorphism)?

  • 프로그래밍 언어의 다형성이란 프로그램 언어의 각 요소들(상수, 변수, 오브젝트, 메서드 등)이 다양한 자료형에 속하는 것이 허가되는 성질을 뜻합니다.
  • C++의 "오버라이딩" 혹은 "오버로딩"의 경우 부모 클래스의 멤버 함수를 자식 클래스에서 동일한 이름으로 재정의 할 수 있습니다. 이때, 해당 메서드는 하나의 자료형에 귀속되는 것이 아니라, 다른 자료형에 속하는 것이 허가되는 것이죠!
  • 대표적인 예로 오버로딩과 오버라이딩이 있습니다!

 

 

[Basic C++] #6_오버라이딩과 오버로딩의 차이점

[Basic C++] #6_오버라이딩과 오버로딩의 차이점 C++ 개발 관련 내용 중, 오버로딩과 오버라이딩에 대해 알아보겠습니다. "전문가를 위한 C"의 8 항목, "클래스와 객체 마스터하기"의 내용입니다. #0.

webddevys.tistory.com

 

#3. 다섯 가지 원칙

1. SRP(Single Responsibility Principle), 단일 책임 원칙?

  • 작성된 클래스는 오직 하나의 기능만 책임지며, 해당 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는데 집중합니다.
  • 결과적으로, 코드 수정 시 어떤 클래스의 변경이 다른 클래스의 변경으로 옮겨가는 연쇄 작용으로부터 방지합니다.
  • SRP는 코드 "가독성"과 "유지보수성" 향상의 장점이 있습니다.

 

2. OCP(Open-Closed Principle), 개방-폐쇄 원칙?

  • Bertrand Meyer 박사는 "객체지향 소프트웨어 설계"에서 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수 등)는 확장에 열려있고, 변경에는 닫혀있어야 한다고 설명합니다.
  • 이때, 중요한 OOP의 성질은 물론 추상화와 다형성이겠죠.
  • 추상화란 다른 모든 종류의 객체로부터 식별될 수 있는 객체의 본질적인 특징입니다.

 

3. LSP(Liskov Substitution Principle), 리스코브 치환 원칙?

  • LSP란, "서브 타입은 언제나 기반 타입으로 교체될 수 있어야 한다"입니다. 즉 LSP를 충족시키기 위해서 서브 타입은 기반 타입과 약속한 규약 혹은 인터페이스를 준수해야 합니다.
  • LSP를 총족시키기 위한 방법은 상위 클래스 활용입니다. 선언은 기반 클래스에(상위), 그리고 생성은 구체 클래스로 대입하도록 합니다.
  • 결과적으로, LSP는 OCP를 구성하는 주요 원칙입니다. LSP는 하위 클래스의 규약 준수와 함께 단단한 상속 구조를 형성해  OCP를 통한 코드의 다형성과 확장성 제공의 기반이 됩니다!

 

4. ISP(Interface Segregation Principle), 인터페이스 분리 원칙?

  • ISP는 어떤 클래스가 자신이 사용하지 않는 인터페이스에 대한 구현을 금지합니다. 다시 말해, 어떤 클래스는 최소한의 인터페이스만을 사용해야 합니다.
  • 하위 클래스의 최소한의 인터페이스 활용을 위해 먼저 하나의 일반적인 인터페이스를 여러 개의 구체적인 인터페이스로 대체해야 합니다. 인터페이스가 너무 일반적일 경우, 하위 클래스는 손해를 감수하고(?) 해당 인터페이스를 사용해야 하기 때문이죠.
  • ISP는 인터페이스의 단일 책임을 강조합니다.

 

4. DIP(Dependency Inversion Principle), 의존성 역전의 원칙? 

  • 의존 관계의 역전이란 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위계 관계를 끊는 것을 의미합니다.
  • 상위 레벨 모듈과 하위 레벨 모듈은 추상을 매개로 메시지를 주고받음으로써 의존성을 낮춥니다.
  • DIP의 3가지 구성 요소는 "IOC(Inversion Of Control)", "훅 메서드",  그리고 "확장성"입니다.
  • Callee는 Caller가 확장할 훅 메서드 인터페이스를 정의합니다. Caller는 훅 메서드를 구현합니다.
  • Caller는 Callee에 자신을 등록하고, Callee는 Caller에게 정보를 전달할 적당한 시점에 Caller의 훅 메서드를 호출하죠.
  • 이를 통해, 호출 관계가 역전되는 IOC 시점이 됩니다.
  • DIP는 컴포넌트 간의 비동기적 커뮤니케이션, 그리고 커뮤니케이션 방식의 단순화를 위해 활용됩니다.

 

 

 

'언어 > 기술 질문' 카테고리의 다른 글

[기술 질문]#10_실수형의 문자열 변환  (0) 2023.02.18
[기술 질문]#9_부동 소수점, float  (0) 2023.02.18
[기술 질문]#6_동적 할당  (0) 2023.01.27
[기술 질문]#5_struct, 구조체  (0) 2023.01.21
[기술 질문]#4_#define, 매크로  (0) 2023.01.08
  1.  
  2. [기술 질문] #9_객체 지향 프로그래밍(OOP)
'언어/기술 질문' 카테고리의 다른 글
  • [기술 질문]#10_실수형의 문자열 변환
  • [기술 질문]#9_부동 소수점, float
  • [기술 질문]#6_동적 할당
  • [기술 질문]#5_struct, 구조체
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 알고리즘
  • 트리
  • BOJ
  • 기술 질문
  • 우선순위 큐
  • Effective C++
  • unreal
  • programmers
  • 정렬
  • 개발
  • Unreal Blueprint
  • C++
  • BFS
  • 그래프
  • stl
  • 디자인 패턴
  • set
  • DP
  • 최단 경로
  • dfs

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[기술 질문]#9_객체 지향 프로그래밍(OOP)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.