절차 지향은 위와 같이 여러 프로시저가 데이터를 공유하는 형태.
// 인증 API
Account account = findOne(id);
if(accout.getState() == DELETED){
}
// 암호 변경 API
Account account = findOne(id);
if(accout.getState() == DELETED){
}
위와 같은 코드가 있다고 가정.
위 코드에서 요구사항이 변경되어 아래와 같은 코드로 변경.
// 인증 API
Account account = findOne(id);
if(accout.getState() == DELETED ||
account.getBlockCount() > 0){
}
// 암호 변경 API
Account account = findOne(id);
if(accout.getState() == DELETED ||
account.getBlockCount() > 0){
}
여기서 만약 또 한 번 바뀐다면, 코드가 시간이 갈수록 복잡해지고 수정이 어려워진다는 것을 알 수 있다.
// 인증 API
Account account = findOne(id);
if(accout.getState() == DELETED ||
account.getBlockCount() > 0 ||
account.getEmailVerifyStatus() == 0){
}
// 암호 변경 API
Account account = findOne(id);
if(accout.getState() == DELETED ||
account.getBlockCount() > 0
account.getEmailVerifyStatus() == 0){
}
객체 지향에서는 객체의 데이터를 직접적으로 사용하게하지 않음.
객체 내부의 프로시저를 통해 접근하게 함.
→ 기능 제공
객체는 제공하는 기능으로 정의
내부적으로 가진 필드(데이터)로 정의하지 않음
예시 : 회원 객체
예시 : 소리 제어 객체
public class VolumeController {
public void increase(int inc){
}
public void decrease(int dec){
}
public int volume(){
}
}
public class Member {
public void changePassword(
String curPwd,String newPwd){
}
}
VolumeController volCount = new VolumeController();
volCount.increase(4);
volCount.decrease(3);
int currentVol = volCount.volume();
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 String getId(){
return id;
}
}
위 클래스를 객체라고 할 수 있을까?
객체는 제공하는 기능으로 정의하기 때문에, 위 클래스는 객체라고 부르기 어려움.
그냥 데이터를 저장하는 데이터 클래스