클래스가 여러곳에서 사용되기 시작한다
아래와 같은 실행결과를 출력해야 한다고 가정하고 코드를 작성하자. 로직의 복잡도를 높이기 위해서 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();
}
}

