[객체 지향 프로그래밍 입문] 객체

kshired·2021년 8월 18일
0
post-thumbnail

절차 지향

절차 지향은 위와 같이 여러 프로시저가 데이터를 공유하는 형태.

절차 지향과 비용

// 인증 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;
	}
}

위 클래스를 객체라고 할 수 있을까?

객체는 제공하는 기능으로 정의하기 때문에, 위 클래스는 객체라고 부르기 어려움.

그냥 데이터를 저장하는 데이터 클래스

profile
글 쓰는 개발자

0개의 댓글