IT 삽질기

클래스 멤버와 인스턴스 멤버 본문

개발/java

클래스 멤버와 인스턴스 멤버

화이팅빌런 2020. 2. 29. 00:09

클래스 멤버

일반적으로 클래스를 만들고 인스턴스를 이용해 그 클래스에 있는 변수와 메소드를 사용하게 된다.

그런데 한 클래스 안에 정의되어 있는 변수에 대해 여러 인스턴스에서 같은 값을 바라보게 하고 싶은 경우에는 어떻게 해야할까?

예를 들어 아래와 같은 클래스 코드를 살펴보자.

class Calculator {
    static double PI = 3.14;
    int left, right;
 
    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
    }
 
    public void sum() {
        System.out.println(this.left + this.right);
    }
 
    public void avg() {
        System.out.println((this.left + this.right) / 2);
    }
}

//코드 출처 : 생활코딩 https://opentutorials.org/course/1223/5440

2행에 있는 PI를 살펴보도록 하자.

PI는 원주율을 계산하기 위한 값으로 모든 인스턴스에서 동일한 값에 접근해야 한다.

그렇게 사용하기 위해 우리는 static라는 키워드를 사용한다.

static를 사용하게 되면 해당 변수는 클래스 멤버 변수가 되며,

해당 클래스를 사용하여 만들어진 모든 인스턴스에서 PI에 접근하는 경우 모두 3.14의 값을 가지게 된다.

 

또 아래와 같이 인스턴스를 생성하지 않고도 변수에 접근할 수 있다.

System.out.println(Calculator.PI);

위와 같은 형식으로 [클래스].[클래스 멤버 변수]를 이용하여 해당 변수에 접근이 가능하며 결과는 3.14가 출력될 것 이다.

 

그렇다면 클래스 멤버 변수의 값을 변경하게 되면 다른 인스턴스에서 접근할 때도 값이 변경될까 ?

답은 '그렇다'이다.

클래스 멤버 변수를 지정하고 해당 변수의 값을 수정하는 경우 모든 클래스 멤버 변수를 호출하는 모든 인스턴스와 클래스에서 변경된 값을 사용하게 된다.

 

클래스 메소드

위에서는 클래스 멤버에 대해서 살펴보았다.

그렇다면 클래스 메소드라는 개념도 있지 않을까?

클래스 메소드도 존재한다.

클래스 메소드도 클래스 멤버와 같이 static 키워드를 사용하여 생성한다.

클래스 멤버와 동일하게 인스턴스를 생성하지 않고도 메소드를 호출하여 사용할 수 있으며,

우리가 지금까지 계속해서 사용해왔던 java의 main 메소드도 static이다.

이는 main class의 인스턴스를 생성하지 않고 main 메소드를 호출하여 프로그램이 정상적으로 동작하게 하기 위해 static 키워드를 이용하여 클래스 메소드 형식으로 호출하는 것이다.

 

인스턴스 메소드와 클래스 메소드 사이에는 아래와 같은 관계가 있다.

인스턴스 메소드는 클래스 멤버에 접근 할 수 있다.

클래스 메소드는 인스턴스 멤버에 접근 할 수 없다.

 

위의 2가지 특징은 잠시만 생각해보면 답이 나오는 문제이다

인스턴스 변수는 인스턴스가 만들어지면서 생성되기 때문에 클래스 메소드에서는 접근할 수 없다.

 

참고 : 생활코딩 Java https://opentutorials.org/course/1223/5440

'개발 > java' 카테고리의 다른 글

FQCN (Full Qualified Class Name)  (0) 2021.07.18
JVM이란?  (0) 2021.07.17
windows에 OpenJDK설치하기  (0) 2020.06.17
java 클래스/인스턴스/객체  (0) 2020.02.23
Comments