자바는 객체지향(Object Oriented) 프로그래밍 언어이다.
객체지향에는 클래스, 객체, 인스턴스, 상속, 인터페이스, 다형성, 추상화 등의 많은 개념들이 존재한다.
객체지향 프로그래밍이란?
계산기를 예로 들어서 계산기에 숫자 3을 입력하고 + 기호를 입력한 후 4를 입력하면 결괏값으로 7을 보여 준다. 다시 한 번 + 기호를 입력한 후 3을 입력하면 기존 결괏값 7에 3을 더해 10을 보여 준다. 즉 계산기는 이전에 계산한 결괏값을 항상 메모리 어딘가에 저장하고 있어야 한다.
이런 내용을 자바 코드로 구현해 보면 계산기의 "더하기" 기능을 구현한 코드는 다음과 같다.
class Calculator {
static int result = 0;
static int add(int num) {
result += num;
return result;
}
}
public class Sample {
public static void main(String[] args) {
System.out.println(Calculator.add(3));
System.out.println(Calculator.add(4));
}
}
add 메소드는 매개변수 num으로 받은 값을 이전에 계산한 결괏값에 더한 후 돌려주는 메소드이다. 이전에 계산한 결괏값을 유지하기 위해서 result 전역 변수(static)를 사용했다.
※ static 키워드가 여기서는 변수에 저장된 값을 계속 유지하기 위해 사용되었다.
출력 결과
3
7
그런데 만일 Sample 클래스에서 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 Sample {
public static void main(String[] args) {
System.out.println(Calculator1.add(3));
System.out.println(Calculator1.add(4));
System.out.println(Calculator2.add(3));
System.out.println(Calculator2.add(7));
}
}
똑같은 일을 하는 Calculator1과 Calculator2 클래스를 만들었다.
출력 결과
3
7
3
10
계산기 1의 결괏값이 계산기 2에 아무 영향을 끼치지 않음을 확인할 수 있다. 하지만 계산기가 3개, 5개, 10개로 점점 더 많이 필요해진다면 어떻게 해야 할까? 그때마다 클래스를 추가할 것인가? 여기에 빼기나 곱하기 등의 기능을 추가해야 한다면 상황은 점점 더 어려워질 것이다.
위와 같은 경우 객체를 사용하면 다음과 같이 간단하게 해결할 수 있다.
class Calculator {
int result = 0;
int add(int num) {
result += num;
return result;
}
}
public class Sample {
public static void main(String[] args) {
Calculator cal1 = new Calculator(); // 계산기1 객체를 생성한다.
Calculator cal2 = new Calculator(); // 계산기2 객체를 생성한다.
System.out.println(cal1.add(3));
System.out.println(cal1.add(4));
System.out.println(cal2.add(3));
System.out.println(cal2.add(7));
}
}
Calculator 클래스의 static 키워드를 모두 삭제했다.
프로그램을 실행하면 클래스 2개를 사용했을 때와 동일한 결과가 출력된다.
3
7
3
10
Calculator 클래스로 만든 별개의 계산기 cal1, cal2(이것을 객체라고 부른다)가 각각의 역할을 수행한다. 그리고 계산기(cal1, cal2)의 결괏값 역시 다른 계산기의 결괏값과 상관없이 독립적인 값을 유지한다. 객체를 사용하면 계산기 대수가 늘어나더라도 객체를 생성만 하면 되기 때문에 클래스만을 사용하는 경우와 달리 매우 간단해진다.
만약 빼기 기능을 추가하려면 Calculator 클래스에 다음처럼 sub 메소드를 추가하면 된다.
class Calculator {
int result = 0;
int add(int num) {
result += num;
return result;
}
int sub(int num) {
result -= num;
return result;
}
}
'Language > Java' 카테고리의 다른 글
[Java] 메소드 (Method) (0) | 2022.08.01 |
---|---|
[Java] 클래스 (0) | 2022.08.01 |
[Java] for each 문 (0) | 2022.08.01 |
[Java] for 문 (0) | 2022.08.01 |
[Java] while 문 (0) | 2022.08.01 |