본문 바로가기

알아가는 중

[객체지향] 객체지향 특징 (캡슐화 | 추상화 | 상속 | 다형성)

객체지향 관련 기본 용어

클래스

  • 타입. 개념에 대한 의도가 있는 정의
  • 속성(attribute)과 오퍼레이션(operation)을 캡슐화한 것

객체 (인스턴스)

  • 클래스의 인스턴스
  • 실제 메모리에 할당된 것. 프로그램에서 사용하는 것.
  • 객체가 자료구조를 갖는다 = 객체가 어떤 속성를 가지고 있다
  • 객체가 적용될 수 있는 오퍼레이션을 가진다 = 연산 능력을 가진다

 

모델링할 때 어떤 개념이 객체인지 속성인지 결정하기 어렵다.

  • 속성은 입력할 수 있고, 객체는 불가능하다.
  • ex) Student 는 객체. 학생 이름, 학번, 주소는 속성.

 

객체지향 특장점

캡슐화 Encapsulation

  • 속성과 관련된 오퍼레이션을 클래스 안에 묶어서 하나로 취급하는 것
  • 분류를 통한 재활용을 목적

추상화 Abstraction

  • 핵심적인 기능을 추출해 일반화, 필요하지 않은 기능을 제거해 대상화
  • 유연한 설계, 복잡도 관리 목적
    → 유연한 설계? 프로그램의 전체 구조를 잘 캡슐화하고 모듈화하여 기능 수정이 필요하면 최소한만 하면 되는 상태
    (인터페이스를 구현한 클래스가 있다면 기능 수정이 필요할 때 코드 수정은 클래스만 하면 되고 인터페이스는 건드릴 필요 없음)
    Head First Design Patterns 1장 참고
    • 인터페이스 Interface
      HAS-A ~을 할 수 있는
      다중상속 가능.
    • 추상 클래스 Abstract Class
      IS-A ~이다
      추상 메서드가 있는 클래스. 상속받은 클래스에서 추상 메서드 정의 필요. 객체 생성 불가.
  • public class Kevin extends Human[추상 클래스] implements Programmer, Swimable[인터페이스]

상속 Inheritance

  • 한 클래스가 다른 클래스의 일반화된 개념인 경우. 자식 클래스에서 부모 클래스의 메소드와 인스턴스를 그대로 상속받는 것
  • 재사용을 목적

다형성 Polymorphism

  • 객체가 다양한 형태를 가질 수 있는 것 = 같은 자료형에 여러 가지 객체를 대입할 수 있는 것
  • 객체를 부품화하여 유지보수를 용이하도록 만듦
    • 오버라이딩 Overriding :  상위 클래스의 메소드를 재정의
      상위클래스의 구조를 유지하면서 각자 적합한 기능 이행
      [[ 클래스 정의시 toString을 @Override 할 수 있는 이유 ]]
    • 오버로딩 Overloading : 파라미터에 따라 다른 기능
      같은 메소드 이름 가능. 기억하기 쉽고 메소드 이름 절약 가능.
      공부할 때 캡쳐했던 건데 출처를 모르겠음

참고