Member Field와 Member Method
클래스를 구성하는 요소 중 멤버 필드에 대해 알아보자.
클래스는 객체가 가지는 속성을 저장하기 위해 필드(변수)를 포함한다.
다음 예제를 보자.
앞에서 클래스와 객체에 대한 개념을 이해했다면 위 내용을 이해하기 쉬울 것이다.
멤버 필드(변수)는 메서드 내에 정의되는 지역변수와
클래스에 정의되는 객체변수로 나눌 수 있다.
지역변수와 객체변수의 차이
메서드에 정의되는 지역변수는 해당 메서드가 실행될 때에만 존재
클래스에 정의되는 객체변수는 객체가 생성되거나 메모리에 올라가면 존재
객체변수는 또 다시 두 가지로 나눠진다.
인스턴스 변수 : 객체를 new 해야 생성되는 필드(변수)
클래스 변수 : 객체를 new 하는 것과 무관하게 클래스 이름으로 바로 접근가능
선언 위치에 따른 변수의 종류를 정리하면 다음과 같다.
인스턴스 변수(객체 생성 시 할당 - 참조변수가 없으면 소멸)
인스턴스가 생성 될 때 마다 만들어지는 변수
인스턴스 생성 후 참조 변수명으로 접근
클래스 변수(클래스가 로딩될 때 할당 - 프로그램종료 시 소멸)
동일한 클래스의 인스턴스들이 공유하는 변수
인스턴스 생성 없이 클래스 명으로 접근 가능
지역 변수(블록 안에서 생성 - 블록 끝나면 소멸)
메서드 내에 선언된 변수
블록 내부에서만 접근 가능
다음은 멤버 메서드에 대해 알아본다.
멤버 필드와 동일한 개념으로 메서드 호출이 가능한 시점이 다르다.
instance method
인스턴스(객체) 생성 후 참조 변수명으로 접근하여 호출
인스턴스(객체)의 속성과 기능에 관련 된 메서드
class method(static 메서드)
인스턴스(객체) 생성 없이 클래스명으로 접근하여 호출
멤버의 속성과 기능에 관련 없는 메서드(인스턴스 변수,함수 사용 불가)
인스턴스 변수를 사용하지 않는 메서드는 static 키워드 고려
다음 예제를 이해하도록 한다.
package exam;
class Test {
int a;
static int b;
void instanceMethod() {
a = 10;
b = 20;
}
static void classMethod() {
// a = 10; 접근 불가
b = 20;
}
}
public class Exam {
public static void main(String[] args) {
// Test.a = 10; 접근 불가
Test.b = 20;
// Test.instanceMethod(); 접근 불가
Test.classMethod();
Test instance = new Test();
instance.a = 10;
instance.b = 20;
instance.instanceMethod();
instance.classMethod();
}
}
인스턴스 멤버는 new를 이용하여 객체를 생성해야 사용가능
클래스 멤버는 객체 생성과 무관하게 클래스 이름으로 접근하여 사용 가능
클래스 멤버는 메모리에 생성되는 시점이 클래스 로드(프로그램 시작)할 때이며
인스턴스 멤버는 new를 통해 객체를 생성했을 때이다.
따라서 클래스 멤버는 인스턴스 멤버에 접근 할 수 없다.(생성 시점이 다르므로)
실습>
값을 카운터 하는 클래스를 작성하여 main메서드에서 활용해 보는 실습
예제 코드)
package exam;
class Counter {
int counter;
void init() {
counter = 0;
}
void increment() {
counter++;
}
void decrement() {
counter--;
}
void dispCounter() {
System.out.println(counter);
}
}
public class Exam {
public static void main(String[] args) {
Counter counter = new Counter();
counter.dispCounter();
counter.increment();
counter.increment();
counter.increment();
counter.dispCounter();
counter.decrement();
counter.dispCounter();
counter.init();
counter.increment();
counter.dispCounter();
}
}
실행결과
'교육자료 > Java' 카테고리의 다른 글
Java 클래스 구성요소(this) (0) | 2017.06.16 |
---|---|
Java 클래스 구성요소(생성자) (0) | 2017.06.16 |
Java 클래스 (Class기초 문법과 OOP 개념) (0) | 2017.06.15 |
Java 배열(Array) (0) | 2017.06.14 |
Java 메서드(Method) (0) | 2017.06.14 |