자바 오리엔테이션

인스턴스의 도입

클래스가 여러곳에서 사용되기 시작한다

아래와 같은 실행결과를 출력해야 한다고 가정하고 코드를 작성하자. 로직의 복잡도를 높이기 위해서 avg 메소드를 추가했다. 또한 예제를 간소화하기 위해서 Employee 클래스를 제거 했다.

10+20
100+200
(10+20)/2 (평균)
(100+200)/2 (평균)

class Calculator{
    public static int left;
	public static int right;
	public static void sum(){
		System.out.println(Calculator.left+Calculator.right);
	}
public static void avg(){
		System.out.println((Calculator.left+Calculator.right)/2);
	}
}
public class Company {
	public static void main(String[] args) {
		Calculator.left = 10;
		Calculator.right = 20;
		Calculator.sum();

		Calculator.left = 100;
		Calculator.right = 200;
		Calculator.sum();
		
		Calculator.left = 10;
		Calculator.right = 20;
		Calculator.avg();
		
		Calculator.left = 100;
		Calculator.right = 200;
		Calculator.avg();

	}
}

아래 코드는 left와 right의 값을 중복으로 설정하고 있다. 

Calculator.left = 10;
Calculator.right = 20;
Calculator.sum();
Calculator.left = 10;
Calculator.right = 20;
Calculator.avg();

클래스 Calculator는 left와 right의 값으로 하나의 상태만을 유지할 수 있기 때문이다. 

클래스를 복제해서 각각의 클래스가 서로 다른 상태를 유지할 수 있도록 하는 방법을 알아보자. 이번 시간에는 인스턴스를 배우게 된다.

class Calculator{
    public int left;
	public int right;
	public void sum(){
		System.out.println(this.left+this.right);
	}
	public void avg(){
		System.out.println((this.left+this.right)/2);
	}
}
public class Company {
	public static void main(String[] args) {
		// 클래스 Calculator를 복제해서 변수 c1에 담는다.
		Calculator c1 = new Calculator();
		c1.left = 10;
		c1.right = 20;
		c1.sum();
		
		Calculator c2 = new Calculator();
		c2.left = 100;
		c2.right = 200;
		c2.sum();
		
		c1.avg();
		
		c2.avg();
	}
}

c1과 c2는 각각 서로 다른 상태(변수)를 가지고 있기 때문에 재사용할 수 있게 된다. 클래스를 복제해서 만든 것을 객체 혹은 인스턴스(instance)라고 한다.

 클래스를 직접 사용해야 하는 경우도 있다. 모든 계산 결과에 기본값을 포함시키고 싶다면 어떻게 해야할까?

 

class Calculator{
    public int left;
	public int right;
	public static int base;
	public void sum(){
		System.out.println(base+left+right);
	}
	public void avg(){
		System.out.println((base+left+right)/2);
	}
}
public class Company {
	public static void main(String[] args) {
		Calculator.base = 100;

		Calculator c1 = new Calculator();
		c1.left = 10;
		c1.right = 20;
		c1.sum();
		
		Calculator c2 = new Calculator();
		c2.left = 100;
		c2.right = 200;
		c2.sum();
		
		c1.avg();
		
		c2.avg();
	}
}

댓글

댓글 본문
작성자
비밀번호
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기