JKROH
2023. 1. 16. 17:50
반응형
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 객체와 서로 연결되었다.
- 메시지
- 객체 간의 상호작용을 메시지를 주고 받는다고 표현한다.
- 메시지는 호출하는 메시지, 리턴하는 메시지, 익셉션 메시지 등이 있다.
더보기
위의 시퀀스 다이어그램에서 로그인 시도, 상품 조회 등을 '호출하는 메시지', 로그인 결과, 상품 리스트 제공을 '리턴하는 메시지' 로 부른다.
반응형