절차지향
으로 만들면 코드를 복사하게되고, 복잡해지고, 수정이 어려워지는 문제가 발생한다.
그렇다면
객체지향
은 어떨까?
데이터
와 프로시저
를 객체로 묶는다.
특정 객체가 가지고 있는 데이터는 객체의 프로시저만 접근할 수 있게 된다.
이렇게 되면, 다른 객체에서는 해당 객체의 데이터로 바로 접근할 수 없게 된다.
객체의 핵심은 기능 제공
이다.
객체가 어떤 기능을 제공하는지가 핵심이 된다.
내부적으로 가진 필드(데이터)로는 정의하지 않는다.
예를 들면 회원 객체가 있을 때 암호 변경하기, 차단 여부 확인하기 기능을 제공한다고 볼 수 있고, 소리 제어기 객체가 있을 때는 소리 크기 감소, 소리 크기 증가라는 기능을 제공한다고 정의해볼 수 있다.
객체는 기능
으로 정의된다.
기능을 어떻게 사용할 수 있는지 알 수 있어야 한다.
이것을 기능 명세
라하는데 자바의 경우 메서드
를 통해 기능을 명세하고 있다.
메서드는 이름, 파라미터, 리턴 타입이 있다.
public class VolumeController {
public void increase(int inc){
...
}
public void decrease(int dec){
...
}
public int volume(){
...
}
}
위 코드에서 increase
라는 메서드 이름, inc라는 int 타입 파라미터 하나, 반환 타입은 없는 것을 알 수 있다.
기능 명세를 보통 메서드로 정의
하게 된다.
객체는 기능을 사용해서 서로 연결된다.
기능을 사용한다는 것은 메서드를 호출
함을 의미한다.
VolumnController volCont = new VolumnController();
volCont.increase(4);
다른 객체의 메서드를 호출해서 기능을 사용하게 된다.
기능을 사용한다는 것은 객체와 객체가 서로 연결된다는 것이다.
객체 지향에서는 메시지
라는 말을 종종 사용한다.
객체와 객체가 서로 상호작용
하는 것을 메시지를 주고 받는다
고 표현하곤 한다.
메시지는 메소드를 호출하는 것도 메시지, 리턴하는 것도 메시지, 익셉션도 메시지라고 표현한다.
public class Member {
private String name;
private Stirng id;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
실질적으로 이 필드는 필드에 접근하는 것과 차이가 없다.
특별한 기능이 없고 단순히 데이터에 바로 접근하는 것처럼 부가적인 기능이 없는 클래스는
객체보다는 데이터
에 더 가깝다. 데이터 클래스라고도 많이 표현된다. (C에서는 구조체)
기능이 붙게되면 그때부터 객체
라고 볼 수 있다.
핵심내용 : 객체는 기능으로 정의한다.
참고 자료
객체 지향 프로그래밍 입문