728x90
반응형
Object Oriented Programming (OOP)

 

자바는 객체지향 프로그래밍 언어이다.

객체지향에는 클래스, 객체, 인스턴ㅅ, 상속, 인터페이스, 다형성, 추상화 등의 많은 개념들이 존재한다.

 

class Calculator{
	// 이전에 계산한 결과값 유지 위해 전역변수(static) 사용
	static int result = 0;
	
	// parameter num으로 받은 값을 이전 결과값에 더한 후 return
	static int add(int num) {	
		result += num;
		return result;
	}
}

	public class TestClass{		
		public static void main(String[] args) {
			
			System.out.println(Calculator.add(3));	// 3
			System.out.println(Calculator.add(4));	// 7
		}
}

 

그런데 만일 TestClass 클래스에서 2대의 계산기가 필요한 상황이 발생하면 어떻게 해야 될까?

각 계산기는 각각의 결과값을 유지해야 하기 때문에 위와 같이 Calculator 클래스 하나만으로는 결과값을 따로 유지하기

어렵다. 이런 상황을 해결하려면 다음과 같이 클래스를 각각 따로 만들어야 한다.

class Calculator1{
	static int result = 0;
	
	static int add(int num) {	
		result += num;
		return result;
	}
}

class Calculator2{
	static int result = 0;
	
	static int add(int num) {	
		result += num;
		return result;
	}
}

	public class TestClass{		
		public static void main(String[] args) {
			
			System.out.println(Calculator1.add(3));	// 3
			System.out.println(Calculator1.add(4));	// 7
			
			System.out.println(Calculator2.add(3));	// 3
			System.out.println(Calculator2.add(7));	// 10
		}
}

 

똑같은 일을 하는 Calculator1 과 Calculator2 클래스를 만들었다.

결과값은 의도한 대로 출력된다.

 

이처럼 계산기 1의 결과값이 계산기 2에 아무 영향을 끼치지 않음을 확인할 수 있다.

하지만 계산기가 3개, 5개, 10개 점점 더 많이 필요하게 된다면 어떻게 해야 할까?

그때마다 클래스를 추가하기에는 무리가 있다.

 

이를 해결하기 위해 '객체'를 사용하면 간단하게 해결할 수 있다.

class Calculator{
	// 각 인스턴스의 연산이 값을 공유하지 않기 때문에 static 을 사용하지 않는다.
	int result = 0;
	
	int add(int num) {	// 덧셈 연산	
		result += num;
		return result;
	}
	
	int sub(int num) {	// 뺄셈 연산
		result -= num;
		return result;
	}
}

	public class TestClass{		
		public static void main(String[] args) {
			
			Calculator cal1 = new Calculator();		// 계산기 1 객체를 생성한다.(instance)
			Calculator cal2 = new Calculator();		// 계산기 2 객체를 생성한다.(instance)
			
			System.out.println(cal1.add(3));	// 3
			System.out.println(cal1.add(4));	// 7
			
			System.out.println(cal2.add(3));	// 3
			System.out.println(cal2.add(7));	// 7
		
		}
}
728x90
반응형

'Language > Java' 카테고리의 다른 글

Java - Call by value  (0) 2023.03.25
Java - Class & Method  (0) 2023.03.25
Java - 제어문(conditional, iteration)  (0) 2023.03.25
Java - Set  (0) 2023.03.25
Java - Map  (0) 2023.03.25

+ Recent posts