간단

맴버란? 본문

Java(객체지향)/클래스맴버,인스턴스맴버

맴버란?

I want to Sleep 2023. 6. 26. 15:42
728x90

겍체도 맴버(구성원)가 있다

 

class 의 맴버 변수는 모든 인스턴스에서 똑같은값을가진다(공유)

  

instance 의 멤버 변수는 각각 다른값을 가진다

 

public class Calculator {
    static double PI = 3.14; // 앞에 static이 붙으면 클래스 변수(statice한 변수) ,모든 값이 동일한 값을 가진다!
    int left, right; // 인스턴스 맴버

    //...

 

static맴버는 클래스명.변수명으로도 바로 호출 가능

System.out.println(Calculator.PI); // 클래스.변수명으로 바로 호출 가능

※ Static 사용이유

  1.변하지 않는 값이 필요한 경우 (공유가능(PI))

  2.인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고 싶을때 ( 클래스명.변수명 바로 호출 가능)

  3. 값의 변경 사항을 모든 인스턴스가 공유해야 하는 상황

 

● 클래스(static) 메소드

public class Calculator {
    public static void sum(int left, int right) { // 메소드에 static이 붙으면 클래스 메소드
        System.out.println(left + right);
    }

    public static void avg(int left, int right) {
        System.out.println((left + right) / 2);
    }


    public static void main(String[] args) {
        Calculator.sum(10,20);// 인스턴스 메소드와는 다르게 직접적으로 접근해서 실행 할 수 있다.
        Calculator.avg(10,20);

    }
}

 

 클래스 메소드는 직접적으로 접근해서 실행 할 수 있다.

 인스턴스메소드는 각각 다른 연산을 했을때 다르게 출력되야 하는 경우에 사용되지만

 클래스메소드는 공통적으로 사용 되어야 하는 경우에는 사용(한번만 사영하면 되는 경우,메모리 절약)

    

 

■ 인스턴스와 클래스 메소드 비교 정리

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

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

      --> 인스턴스 변수는 인스턴스가 만들어지면서 생성되는데 . 클래스 메소드는 인스턴스가 생성되기 전에 만들어 지기

     때문에  클래스메소드가 인스턴스에 접근하는 것은 존재하지 않는 인스턴스 변수에 접근하는 것과 같기 때문이다

 

 아래 코드는 인스턴스메소드안에 클래스 변수가 들어가는지 클래스메소드 안에서 인스턴스 변수가 들어 갈 수 있는지 확인하는 코드이다.

public class C1 {
    static int static_variable = 1;
    int instance_variable = 2;

    static void static_static() {
        //static 메서드는 직접 스태틱변수 접근 가능
        System.out.println(static_variable);
    }

    static void static_instance() {
        // 클래스메서드에서는 인스턴스 변수 접근x error 발생
//         System.out.println(instence_variable);
    }

    void instance_static() {
        //인스턴스 메소드에 static 변수 접근 가능
        System.out.println(static_variable);
    }

    void instance_instance() {
        //인스턴스 메소드는 인스턴스변수 호출 가능
        System.out.println(instance_variable);
    }

    public static void main(String[] args) {
        C1 c1 = new C1();
        C1.static_static(); // 1
//        C1.static_instance(); error
        c1.instance_static(); // 1
        c1.instance_instance(); //2
    }
}