Updated:

1 minute read

개요

  • 설계 방법론
  • 객체라는 기본 단위로 나누고 객체간의 상호작용을 서술하는 방식
  • 객체란 자료와 행동의 묶음
  • 객체지향은 특정 언어가 아니라 개념
  • 상향식(Bottom-up) 문제 해결
    • 작은 문제를 해결하는 객체를 만든 후 객체들의 조합으로 큰 문제 해결


요소

  • 추상화(abstraction)
    • 목적과 관련이 없는 부분을 제거하고 공통된 부분만을 표현
  • 캡슐화(encapsulation)
    • 관련있는 데이터와 동작을 하나의 단위로 묶는 행위
  • 정보 은닉(information hiding)
    • 데이터나 동작을 감추는 행위
    • 캡슐화에서 파생된 보조 개념
    • 캡슐화와 같은 개념이 아님
  • 상속(inheritance)
    • 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것
    • 오버라이딩
      • 자식 클래스에서 기능만을 재정의
      • 오버로딩과는 다름
  • 다형성(polymorphism)
    • 상황에 따라 다른 의미로 해석
    • 서브타입 다형성
      • 상위 클래스의 포인터나 참조변수 등이 하위 클래스의 객체를 참조
    • 매개변수 다형성
      • 타입을 매개변수로 받아 새로운 타입을 되돌려주는 기능
      • ex
        • C++ 템플릿
    • 임시 다형성
      • 함수 오버로딩
      • 연산자 오버로딩
    • 강제 다형성
      • 묵시적 형 변환
        • double a = 30;
      • 명시적 형 변환
        • double a = (double)30;
  • 직렬화(serialization)
    • 객체를 바이트 코드 변환
  • 역직렬화(deserialization)
    • 바이트 코드를 객체로 변환


원칙

  • SOLID(객체지향 5원칙)
    • SRP(Single Responsibility Principle)
      • 단일 책임 원칙
      • 객체는 오직 하나의 책임을 가져야 한다
    • OCP(Open-Closed Principle)
      • 개방-폐쇄 원칙
      • 객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다
    • LSP(Liskov Substitution Principle)
      • 리스코프 치환 원칙
      • 자식 클래스는 언제나 자신의 부모 클래스를 대체 가능
    • ISP(Interface Segregation Principle)
      • 인터페이스 분리 원칙
      • 클라이언트에서 사용하지 않는 메서드는 사용하면 안되는 원칙
    • DIP(Dependency Inversion Principle)
      • 의존성 역전 원칙
      • 추상성이 높고 안정적인 고수준의 클래스는 구체적이고 불안정한 저수준의 클래스에 의존해서는 안 된다는 원칙


클래스, 객체, 인스턴스

  • 클래스
    • 상태와 행동으로 이루어진 설계도
  • 객체
    • 설계도에 의해 만든어진 대상
  • 인스턴스
    • 메모리에 할당된 객체
    • 선언되었을때는 객체, 객체가 new에 의해 메모리에 할당되었을때는 인스턴스
  • 사람(클래스) - 손흥민(객체)


장점

  • 코드 중복 최소화
  • 역할 분담 명확화
  • 재사용성 증가
  • 가독성 증가


단점

  • 개념을 기준으로 나누다보니 컴퓨터 친화적이지는 않음