본문 바로가기
SPRING

[파트 1. 스프링 입문] 챕터 1-2. 객체지향의 4대 특성

by ZZON90 2022. 2. 25.

 객체지향이 4대 특성에 대해 포스팅합니다.

 

 

1. 캡슐화

 캡슐화는 객체의 속성(Variable)을 보호하기 위해 사용합니다. 휴대전화의 본체 안 수많은 부품이 있지만, 전원을 켜기 위해서는 전원장치에 전기 신호를 직접 주는 것이 아니라, 휴대전화의 전원 버튼을 눌러 전원 속성을 On/Off 하도록 변경합니다.

 

Method 설계

  •  속성이 선언되었으나, 상태를 변경하는 method가 없다면 잘못 선언된 속성이다. 즉, 자신이 가지고 있는 속성에 대해서는 해당 상태를 변경하는 기능을 제공해야 한다.
  • 실물 객체가 가진 기능을 모두 제공해야 한다. 하지만 실제 개발시에는 현재 개발 중인 시스템에 맞춰 시스템에서 필요한 부분만 기능을 구현합니다.
  • 각각의 method는 서로 관련성이 있어야 한다.
  • 객체 안의 Method는 객체 안의 속성을 처리해야 하며, 다른 객체를 전달받아 해당 다른 객체의 정의된 속성을 직접 처리하면 안 된다.

단, Method 실행에 필요한 값들은 객체의 형태가 아닌 매개변수의 형태로 전달되어저야 한다.

 

Method 종류

  • Getter/Setter Method
    외부에서 내부 속성(Variable)에 직접 접근하지 않고 Getter/Setter Method를 통해 접근하도록 한다.
  • CRUD Method
    데이터 처리를 위한 기본적인 CRUD를 제공
  • Business Logic Method
    비즈니스 로직 처리를 위한 Method를 제공
  • 객체의 생명주기 처리 Method
    흔히 destroy(), disconnect(), quit() 등 소멸에 대한 Method를 제공
  • 객체의 영구성 관리 Method
    영구성 속성에 대한 변경이 필요한 경우 외부에서는 접근이 불가능하도록 private으로 선언하며, 내부의 다른 Method를 통해 사용되도록 한다.

 

장점

  • 객체지향의 패러다임 중 하나인 추상화를 제공한다. 실제로 Method가 어떻게 동작하는지 외부에서는 이해할 필요가 없으며 이를 단순 호출만으로 해당 기능을 실행할 수 있습니다. 이를 통해 객체 단위로 프로그램 설계하는 것이 가능해집니다.
  • 재사용성 향상
    한 객체에 관련된 속성 및 Method는 모두 캡슐화의 형태로 제공됩니다. 객체의 모듈성과 응집도가 높아지고 이를 통해 재사용성이 높아집니다.
  • 유지보수의 효율성이 향상된다.

 

무결성

 보통 캡슐화 코드라고 하면, 주로 변수는 priavte으로 선언하고 method는 public으로 선언하는 형태를 가지게 됩니다. 이는 객체의 무결성을 위함입니다. getter/setter를 제외한 public method는 입력된 매개변수를 Validation(유효성검사)을 한 후 실행하는 것을 기본으로 합니다. Validation을 통해 객체의 값을 변경하거나 값에 대한 유효성을 가질 수 있습니다.

 

 

2. 상속

 객체지향의 상속은 현실의 상속처럼 부모가 가진 것 중 일부를 내려주는 것이 아니라 자식으로 내려갈수록 구체화되는 것입니다.

  • 현실
    부모가 가진 집, 차, 현금 중 일부를 선택해서 집, 현금을 줄 수 있습니다. 자식은 부모의 모든 재산을 받거나 그 중 일부만 가질 수 있습니다.
  • 객체지향
    집, 차, 현금이 모두 상속됩니다. 추가로 자식은 땅을 가질 수 있습니다. 즉 자식은 부모의 모든 속성을 가질 수 있고 추가로 +@를 가질 수 있습니다.

 

상속의 효과

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

 

 

3. 다형성

 다형성은 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미합니다. 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 구현하고 있습니다.

Class Parent {...}
Class Child extends Parent{...}

Parent pa = new Parent(); // 허용
Child ch = new Child();   // 허용
Parent pc = new Child();  // 허용
Child cp = new Parent();  // 오류 발생.

Child 클래스에 Parent 객체를 참조할 때만 오류가 발생합니다. 이는 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 많기 때문입니다. 클래스는 상속을 통해 확장될 수는 있어도 축소될 수 없기 때문에 자식클래스에서 사용할 수 있는 멤버의 개수가 언제나 부모 클래스와 같거나 부모 클래스보다 많게 됩니다.

 

 

4. 추상화

 객체지향에서 추상화는 모델링을 의미합니다. 여러 객체에 대해 공통적인 부분 또는 특정 특성을 분리해 재조합하는 부분이 추상화입니다. 앞에서 배운 다형성, 상속이 모두 추상화에 속합니다.

 

추상 메서드

 추상 메서드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메서드를 의미합니다. 자바에서 추상 메서드를 사용하는 이유는 상속받는 자식 클래스가 추상 메서드를 반드시 구현하기 위해서입니다.

 추상 메서드는 선언부만 존재하고 구현부는 작성하지 않습니다. 구현부는 자식 클래스에서 오버라이딩해 사용합니다. 선언부만 존재하고 구현부는 작성하지 않고 선언부 끝에 세미콜론(;)을 작성합니다.

abstract returType methodName(params);

 

추상 클래스

 하나 이상의 추상 메서드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 합니다. 이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메서드의 집합을 정의할 수 있도록 합니다. 즉, 추상 클래스를 상속받으면 반드시 추상 메서드를 오버라이딩 해야 합니다.

abstract class Parent{
	...
    abstract reutnrType methodName(params);
    ...
}

 추상 클래스는 동작이 정의되어 있지 않으므로 인스턴스를 생성할 수 없습니다. 추상 클래스를 사용하기 위해서는 상속을 통해 자식 클래스를 만들고 자식 클래스에서 추상 메서드를 오버라이딩 해야 자식 클래스의 인스턴스를 생성할 수 있게 됩니다.

댓글