자바 오리엔테이션

객체지향의 역사

객체지향이 왜 필요하게 되었는지를 생각해보자.

10과 20을 더한다

프로그래밍으로 이런 일을 한다는 것을 말이 안된다. 이 코드는 매우 길고 복잡한 로직이라고 간주하자.

package offline_tutorials;
public class Company {
public static void main(String[] args) {
    	System.out.println(10+20);
	}
}

요구사항이 바뀐다

초기 10과 20의 덧셈을 100과 200으로 바꿔달라는 요구사항이 들어왔다. 가변적인 부분을 변수화시켜서 로직에서 분리한다. 변수는 데이터를 담는 그릇이라는 점을 상기하자.

int left = 100;
int right = 200;
System.out.println(left+right);

로직이 여러곳에서 사용된다

메소드화를 통해서 재활용성을 높인다. 메소드는 로직을 담는 그릇이라는 점을 상기하자.

static void sum(int left, int right){
	System.out.println(left+right);
}
public static void main(String[] args) {
	int left = 10;
	int right = 20;
	sum(left, right);

    left = 100;
	right = 200;
	sum(left, right);
}

이름의 의미가 달라지기 시작한다

프로젝트가 커지면서 협업을 하게 된다. 합류한 개발자가 sum의 의미를 합계가 아니라 요약(summary)라는 의미로 사용한다. 또 변수 right를 기존의 우항에서 임금(권리)으로 사용한다. 같은 이름에 다른 기능을 가진 코드가 등장한다. 아래 코드는 동작하지 않는다.

static void sum(int left, int right){
    	System.out.println(left+right);
	}
	
	static void sum(int period, int right){
		System.out.println("급여 : "+right*period);
	}
	
	public static void main(String[] args) {
		int left = 10;
		int right = 20;
		sum(left, right);
		
		right = 5000;
		int period = 2;
		sum(period, right);
	}

이름의 충돌을 해결하자

static void calculator_sum(int left, int right){
    System.out.println(left+right);
}

static void employee_sum(int period, int right){
	System.out.println("급여 : "+right*period);
}

public static void main(String[] args) {
	int calculator_left = 10;
	int calculator_right = 20;
	calculator_sum(calculator_left, calculator_right);
	
	int employee_right = 5000;
	int employee_period = 2;
	employee_sum(employee_period, employee_right);
}

댓글

댓글 본문
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기