클래스는 데이터인 멤버 변수 뿐 아니라 기능 역할을 하는 메서드도 포함할 수 있다.
package oop1;
public class ValueData {
int value;
}
package oop1;
public class ValueDataMain {
public static void main(String[] args) {
ValueData valueData = new ValueData();
add(valueData);
add(valueData);
add(valueData);
System.out.println("최종 숫자 = " + valueData.value);
}
static void add(ValueData valueData) {
valueData.value++;
System.out.println("숫자 증가 value = " + valueData.value);
}
}
ValueData
라는 인스턴스를 생성하고 외부에서 ValueData.value
에 접근해 숫자를 하나씩 증가시키는 단순한 코드이다. 코드를 보면 데이터인 value
와 value
의 값을 증가시키는 기능인 add()
메서드가 분리되어 있다.
자바 같은 객체 지향 언어는 클래스 내부에 속성(데이터)과 기능(메서드)를 함께 포함할 수 있다. 클래스 내부에 멤버 변수 뿐만 아니라 메서드도 포함할 수 있다는 뜻이다.
package oop1;
public class ValueObject {
int value;
void add() {
value++;
System.out.println("숫자 증가 value = " + value);
}
}
데이터인 value
와 해당 데이터를 사용하는 기능인 add()
메서드를 함께 정의했다.
💡 참고 : 여기서 만드는
add()
메서드에는static
키워드를 사용하지 않는다.
메서드는 객체를 생성해야 호출할 수 있다. 그런데
static
이 붙으면 객체를 생성하지 않고도 메서드를 호출할 수 있다.
package oop1;
public class ValueObjectMain {
public static void main(String[] args) {
ValueObject valueObject = new ValueObject();
valueObject.add();
valueObject.add();
valueObject.add();
System.out.println("최종 숫자 = " + valueObject.value);
}
}
ValueObject valueObject = new ValueObject();
valueObject
라는 객체를 생성했다. 이 객체는 멤버 변수 뿐만 아니라 내부에 기능을 수행하는 add()
메서드도 함께 존재한다.
인스턴스의 메서드를 호출하는 방법은 멤버 변수를 사용하는 방법과 동일하다. .
(dot)을 찍어서 객체 접근한 다음에 원하는 메서드를 호출하면 된다.
valueObject.add(); // 1
x002.add(); // 2: x002 ValueObject 인스턴스에 있는 add() 메서드를 호출한다.
3: add()
메서드를 호출하면 메서드 내부에서 value++
을 호출하게 된다. 이때 value
에 접근해야 하는데, 기본으로 본인 인스턴스에 있는 멤버 변수에 접근한다. 본인 인스턴스가 x002
참조값을 사용하므로 자기 자신인 x002.value
에 접근하게 된다.
4: ++
연산으로 value
의 값을 하나 증가시킨다.