[JAVA] Static이란 ? - 2

popolarburr·2023년 2월 27일
0
post-thumbnail

[JAVA] Static이란

  • 사전적 의미 : Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다. 메모리에 한번 할당되므로 여러 객체가 해당 메모리를 공유하게 됩니다.
  • 사용 : static은 class 변수로 , 클래스 및 객체 선언없이 사용가능하다
     public class Person {
    	public static final String name = "KimDongWoo";
    
    	public static void main(String[] args) {
    			System.out.println(this.name);
    			// 출력 : KimDongWoo
    	}
    }
  • 사용 예시
public class Main {
    public static void main(String[] args) {
        사람 a사람1 = new 사람();
        a사람1.이름 = "홍길동";
        a사람1.나이 = 22;

        a사람1.자기소개();
        // 출력 : 저는 22살 홍길동 입니다.

        사람 a사람2 = new 사람();
        a사람2.이름 = "홍길순";
        a사람2.나이 = 25;

        a사람2.자기소개();
        // 출력 : 저는 25살 홍길순 입니다.

        a사람1.자기소개();
        // 출력 : 저는 22살 홍길동 입니다.
    }
}
// static은 static끼리만 접근가능 / 그 반대도 마찬가지
// 또한 static은 본사(클래스)직원이기에 객체로 만들면 내부에 생성되지 않음
// 그래서 static으로 필드랑 메서드만 만들어진 클래스에 대한 객체를 만들면
// ex) 사람 a사람1 = new 사람(); 일 때 a사람1.나이라는 필드는 없다
// 그러니까 자바 내부적으로 자연스럽게 클래스(본사)를 찾게되고 거기에 있는지 확인 후 그 값을 사용
// 즉, static int 나이; 는 본사직원이기에 a사람1.나이 = "10" 이 아니고
// 사람.나이 = "10"이 된다.

class 사람 {
    static int 나이;
    static String 이름;

    static void 자기소개() {
        System.out.println("저는 " + 나이 + "살 " + 이름 + " 입니다.");
    }
}

사람 클래스를 사용하여 객체를 만들면, 그 객체 안에는 static이 붙지 않는 메소드가 생긴다.

예시 1

A a = new A(); → A클래스의 객체 만들어 a변수에 담음.

a.introduce(); → 본사가 아닌 대리점의 메서드인 introduce()를 사용

결과 1

  • 왜 이런 결과가 나오냐?
  1. static은 클래스필드(본사필드)로 객체(대리점필드)가 아닌 클래스 내에 자체적으로 존재한다.
  2. 또한 결과가 ‘0살인 null입니다’ 로 나오는 이유는 대리점인 a 객체에 age와 name이 없기 떄문에 자동적으로 본사에 가서 찾는다. 근데 본사(클래스 본체)에 가봤더니 선언만 되어있고 초기화가 되어있지 않아 쓰레기값(초기값)인 0과 null이 출력된 형태.

그럼 반대로 해보면 어떨까?

예시 2.

A a = new A()와 a.introduce()는 그대로 두고 필드엔 static을 빼고, 메서드엔 static을 붙였다.

그 결과 2.

번역 : java: 정적이 아닌 변수 정적 컨텍스트에서 참조할 수 없습니다

이러한 결과가 나오는 이유

  1. static은 staic 끼리만 접근 및 통신이 가능하다.
  2. 정적(static)컨텍스트(메서드)에서 정적변수가 아닌 변수를 참조하려니 에러 발생!

결론 : static <-> static / non-static <-> non-static끼리끼리 + static은 클래스 본체에만!

profile
차곡차곡

0개의 댓글