객체지향 2. 객체지향의 4대 특성

min seung moon·2021년 6월 24일
0

Spring

목록 보기
3/50
post-thumbnail

1. 캡슐화

  • 객체의 속성(Variable)을 보호하기 위해서 사용
  • 객체의 캡슐화는 션실 세계에서도 볼 수 있다
    • 컴퓨터 본체 안에 수 많은 부품이 있지만, 전원을 켜기 위해서는 메인보드에 전기 신호를 직접 주는 것이 아닌, 외부 케이스에 있는 전원 버튼을 통해서 상태 속성을 On/Off 하도록 변경 한다

01. Method 설계

  • 속성이 선언되었으나, 이의 상태를 변경하는 method가 없다면, 잘못 선언된 속성
    • 즉, 자신이 가지고 있는 속성에 대해서는 해당상태를 변경하는 기능을 제공
  • 실물 객체가 가진 기능을 모두 제공
    • 예를 들면, 자동차의 렌탈, 반납, 주행거리 계산 등등
  • 각각의 Method는 서로 관련성이 있어야 한다
    • 차량의 렌탈/반납, 자동차 등록증 등록/해지 등 각 속성의 상대 되는 기능을 제공
  • 객체 안의 Method는 객체 안의 속성을 처리해야 하며, 다른 객체를 전달 받아 해당하는 객체에 정의된 속성을 직접 처리 하면 안 된다.
  • 단, Method에 실행에 필요한 값들은 객체의 형태가 아닌 매개변수의 형태로 전달되어져야 한다.

02. Method 종류

  • Getter/Setter Method
    • 외부에서 내부 속성(Varible)에 직접 접근하는 것이 아닌 Getter/Setter Method를 통해서 접근하도록 적용
  • CRUD Method
    • 데이터 처리를 위한 기본적인 Method를 제공
  • Business Logic Method
    • 비즈니스 로직 처리를 위한 Method를 제공
  • 객체의 생명 주기 처리 Method
    • 흔히 destory(), disconnect() 등 quit() 등 소멸에 대한 method
  • 객체의 영구성 관리 Method
    • 영구성(유효성) 속성에 대한 변경이 필요한 경우 외부에서는 접근이 불가능 하도록 private로 선언하며, 내부의 다른 Method를 통해서 사용되도록 한다
  • Method 속성은 반드시 1개에 속할 필요는 없으며, 여러 속성에 해당 될 수 있다

03. 장점

  • 객체지향의 패러다임 중 하나인 추상화를 제공한다
    • 실제로 Method가 어떻게 동작하는지는 외부에서는 이해할 필요가 없으며, 이를 단순 호출마느로 해당 기능을 실행할 수 있고, 이를 통해서 객체 단위로 프로그램 설계가 가능
  • 재 사용성 향상
    • 한 객체에 관련된 속성 및 Method는 모두 캡슐화의 형태로 제공됨으로, 객체의 모듈성과 응집도가 높아진다. 이를 통하여 재 사용성이 높아진다
      • 만일 절차적 프로그래밍에서, Method를 재사용한다면, 함수가 참조하고 있는 전역변수 및 내부에서 호출하는 Method가 미치는 영향을 모두 체크해야 하나, 객체의 경우는 단일 객체에만 영향을 주기에 재 사용성이 높다
  • 앞선 이유로 인하여, 유지보수의 효율성이 향상 된다.

04. 무결성

  • 보통의 캡슐화 코딩이라고 한다면, 주로 변수는 private로 선언하고, Method를 public으로 선언하는 형태를 많이 가지게 된다
  • 이는 객체의 무결성을 위함으로, Getter/Setter를 제외하고는 public method는 입력된 매개변수를 Validation을 한 후에 실행하는 것을 기본으로 한다
  • Valication을 통하여, 객체의 값을 바꾸거나, 값의 대한 유효성을 가질 수 있다

2. 상속

  • 객체 지향에서의 상속은, 속성의 상속이 아닌, 하위로 내려갈 수록 구체화 되는 것

01. 상속의 효과

  • 프로그램 구조에 대한 이해도 향상
    • 최상위 클래스의 구조를 보고, 하위 클래스의 동작을 이해할 수 있다
  • 재사용성 향상
    • 상속을 이용하여, 해당 클래스에 필요한 속성 및 메소드를 모두 정의하지 않고, 상속을 받아서 사용 할 수 있다
  • 확장성 향상
    • 일관된 형태의 클래스 객체를 추가할 수 있어, 간단하게 프로그램 확장이 가능
    • EX) 신규 우닛
  • 유지보수성 향상
    • 각 객체마다, 자신의 메소드를 정의하고 있다면, 코드 수정에서 많은 작업이 필요하지만, 상속을 사용한 경우 일관된 형태로 작성이 가능

3. 다형성

  • 하나의 개체가 여러 개의 형태로 변화하는 것을 말하며, 이를 객체지향에서도 유사하게 사용
  • 다형성을 하기 위해서는 오버라이딩을 통해서 가능

Unit 저글링 = new 저글링();
Unit 시즈탱크 = new 시즈탱크();
Unit 레이스 = new 레이스();
Unit 뮤탈 = new 뮤탈();

unitMove(저글링);
unitMove(시즈탱크);
unitMove(레이스);
unitMove(뮤탈);

private void unitMove(Unit unit) {
	unit.move();
}

4. 추상화

  • 객체지향에서의 추상화는 모델링이다
  • 구체적으로 공통적인 부분, 또는 특성을 분리해서 재조합 하는 부분이 추상화이다
  • 앞에서 배운 다향성, 상속 모두 추상화에 속한다
profile
아직까지는 코린이!

0개의 댓글