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