본문 바로가기
Programming/객체지향프로그래밍입문

# 객체

by JKROH 2023. 1. 16.
반응형

Main Point : 객체는 기능으로 정의한다.


- 절차 지향

  • 절차 지향은 하나의 데이터를 여러 procedure가 사용한다.
  • 따라서 시간이 흐르며 요구 사항이 늘어날수록 코드의 유지보수를 어렵게 한다.
  • 아래의 코드를 보며 이해해보자
//인증 API
Account account = findOne(id);
if(account.getState() == DELETE || account.getBlockCount() > 0){
...
}

//암호 변경 API
Account account = findOne(id);
if(account.getState() == DELETE || account.getBlockCount() > 0){
...
}
더보기

 위의 코드에서 요구 사항이 늘어나 아래와 같이 수정한다.

//인증 API
Account account = findOne(id);
if(account.getState() == DELETE || account.getBlockCount() > 0 || account.getEmailVerifyStatus() == 0){
...
}

//암호 변경 API
Account account = findOne(id);
if(account.getState() == DELETE || account.getBlockCount() > 0 || account.getActiveStatus() == ENABLE){
...
}
더보기

 서로 다른 API에서 account에서 state, blockCount 그리고 각각 emailVerifyStatus와 activateStatus의 데이터를 사용한다.

 이후 추가적으로 요구 사항이 발생하면 계속해서 여러 API들을 돌아봐야 한다. 즉 코드를 유지보수함에 있어 살펴봐야 할 부분이 많아지게된다.

 

- 객체 지향

  • 객체 지향은 데이터와 procedure를 '객체'라는 단위로 묶어서 사용한다.
  • 즉 특정 객체가 가지고 있는 데이터는 특정 객체의 procedure만 사용할 수 있다. 다른 객체는 해당 데이터에 바로 접근할 수 없다.
  • 각각의 객체는 procedure를 이용해 다른 객체와 소통한다.
  • 요구 사항이 늘어감에 따라 절차 지향에 비해 코드의 유지보수가 수월해진다.

 

- 객체란?

  • 객체의 핵심은 기능을 제공하는 것이다.
  • 즉, 각 객체는 객체가 제공하는 기능으로 정의한다. 객체 내부의 필드(데이터)로 정의하지 않는다.
  • 회원 객체가 있다고 할 때, 회원 객체는 암호 변경하기 기능, 차단 여부 확인하기 기능 등 기능들로 정의된다. 
public class Member{

    private String name;
    private String id;
    
    public void setName(String name){
    	this.name = name;
    }
    
    public String getName(){
    	return name;
    }
    
    public void setId(String id){
    	this.id = id;
    }
    
    public void getId(){
    	return id;
    }
더보기

 해당 클래스는 '객체'라고 보지 않는다. 명세된 '기능'이 없기 때문이다. name과 id라는 데이터에만 접근하고 반환할 뿐이다. 이런 클래스를 데이터 클래스라고 부른다.

 

-  기능 명세

  • 기능은 메소드(오퍼레이션)를 이용해서 명세한다.
  • 각 메소드는 메소드의 이름, 파라미터, 반환값(결과)로 구성된다.
public class VolumeController {

    private static final int volumn = 0;
	
    public void increase(int num) {
    	volume += num;
    }
    
    public void decrease(int num) {
    	volume -= num;
    }
    
    public int volume() {
    	return volume;
    }
더보기

 위 코드에서는 세 개의 메소드가 존재한다. increase, decrease, volumn은 각 메소드의 이름이며, int num은 두 메소드가 받는 파라미터이다. void메소드인 increase와 decrease는 별도의 반환값 없이 볼륨을 올리고 내리는 결과만을 보이며, volumn 메소드는 int volume 값을 return한다.

 

-  객체와 객체

  • 서로 다른 객체끼리는 기능을 사용해서 연결한다.
  • 이 때 기능을 사용한다는 것은 메소드를 호출한다는 뜻이다.
public class MainController {

    VolumeController volumeController = new VolumeController();
    
    volumeController.increase(4);
    
    volumeController.decrease(4);
    
    int currentVolume = volumeController.volume(4);
더보기

 VolumeController객체의 여러 메소드들을 호출함으로써 MainController 객체와 서로 연결되었다.

 

-  메시지

  • 객체 간의 상호작용을 메시지를 주고 받는다고 표현한다.
  • 메시지는 호출하는 메시지, 리턴하는 메시지, 익셉션 메시지 등이 있다.

더보기

 위의 시퀀스 다이어그램에서 로그인 시도, 상품 조회 등을 '호출하는 메시지', 로그인 결과, 상품 리스트 제공을 '리턴하는 메시지' 로 부른다.

 

반응형

'Programming > 객체지향프로그래밍입문' 카테고리의 다른 글

# 기능과 책임 분리  (0) 2023.01.28
# 상속보다는 조립  (0) 2023.01.27
# 다형성과 추상화  (0) 2023.01.19
# 캡슐화  (0) 2023.01.16
# 들어가며  (0) 2023.01.15

댓글