Home 객체 지향 프로그래밍(Object Oriented Programming)
Post
Cancel

객체 지향 프로그래밍(Object Oriented Programming)

객체 지향 프로그래밍

프로그램의 모든 것을 객체(Object)로 취급하는 프로그래밍 패러다임.

구성요소

  • 클래스(Class)

    공통되는 속성과 기능을 정의한 것. 사용자 정의 데이터 형.

  • 객체(Object)

    클래스의 인스턴스(메모리에 할당된). 고유의 속성을 가지며 클래스에서 정의한 기능을 수행할 수 있다.

  • 메서드(Method)

    클래스에서 정의한 기능.

  • 메시지(Message)

    객체에 명령을 내리는 메세지.

OOP 특징(요소)

  • 추상화(Abstraction)

    객체의 공통되는 부분을 묶어내는 것. 클래스를 정의하는 과정.

    ex) 사과, 배, 바나나는 과일 이라는 클래스로 추상화할 수 있다.

  • 캡슐화(Encapsulation)

    속성과 기능을 한데 묶고 접근을 제어하는 것. 정보은닉의 장점이 있다.

  • 상속(Inheritance)

    기반 클래스의 속성/기능을 파생 클래스가 물려받는 것. 재사용을 통해 코드의 중복을 제거하는 장점이 있다. C++ 에서는 다중 상속도 가능하지만 다이아몬드 상속 문제 등을 조심해야 한다.

  • 다형성(Polymorphism)

    같은 형태지만 다른 일을 하는 기능을 하는 것.

    ex) 동물 클래스의 울음소리 함수(virtual)를 고양이/강아지 파생 클래스에서 오버라이딩(override) 함으로써 울음소리 함수를 호출했음에도 ‘멍멍’, ‘냐옹’ 과 같이 다른 일을 하게 되는 것.

    • 동적 바인딩(Dynamic Binding)

      런타임 시간에 바인딩 함으로써 다형성을 실현한다.

OOP 원칙(SOLID)

  • Single Responsibiliity Principle (단일 책임 원칙) : 하나의 클래스는 하나의 목적을 위해 생성되어야 한다. 요구 사항을 수정하기 위해 오직 하나의 클래스만 변경하면 된다. 가독성 및 유지보수에서 유리하다.
  • Open Close Principle (개방 폐쇄 원칙) : 프로그램의 구성요소(컴포넌트, 클래스, 함수)는 확장에는 개방적이고 변경에는 폐쇄적이기 위해, 요구 사항을 수정하기 위해 기존 구성요소의 변경없이 확장하여 재사용할 수 있어야 한다. 추상화와 다형성을 통해 이 원칙을 지킨다.
  • Liskov Substitution Principle (리스코브 치환 원칙) : 부모 클래스가 들어갈 자리에 자식 클래스가 들어가도 잘 작동해야 한다.
  • Interface Segregation Principle (인터페이스 분리 원칙) : 사용하지 않는 인터페이스에 의존하지 않도록 해야한다.
  • Dependency Inversion Principle (의존성 역전 원칙) : 상위 레벨 모듈이 하위 레벨 모듈에 의존하지 않도록 해야한다.

장점

소프트웨어 공학 관점에서 강한 응집력(Strong Cohesion)과 약한 결합력(Weak Coupling)을 가지게 된다. 가독성과 재사용성이 좋아진다.

  • 응집도/결합도 (Cohesion/Coupling)

    응집도

    프로그램의 요소가 특정 목적을 위해 연관된 기능이 밀접하게 연관되어 구현되어있고 관련이 없는 일을 하지 않을 경우 응집도가 높다고 한다. 응집도가 높을수록 프로그램을 이해하기 쉬어져 유지보수성이 높아진다.

    결합도

    프로그램의 요소가 다른 요소에 의존적이고 강하게 연결되어 있을 경우 결합도가 높다고 한다. 결합도가 높을수록 연관된 클래스간의 수정이 어려워지고 재사용성이 낮아진다.

This post is licensed under CC BY 4.0 by the author.

네트워크 용어 정리

렌더링 파이프라인(Rendering Pipeline)