# 9장 자바제어자 1

InSeok·2022년 5월 15일
0

자바

목록 보기
9/9

참조 : Do it Java 완전정복
http://www.yes24.com/Product/Goods/103389317

접근 지정자

  • 자바 제어자: 클래스, 필드, 메서드, 생성자 등 에게 어떠한 특징을 부여하는 문법 요소
    • 접근 지정자 : 클래스, 멤버 생성자 앞에 위치 간으, 사용범위를 정의하는 역할

멤버 및 생성자의 접근 지정자

  • public, protected, default(또는 package), private 사용가능
  • 아무것도 작성하지 않으면, default 접근지정가 자동설정됨
    • public : 동일 패키지의 모든 클래스 + 다른 패키지의 모든 클래스에서 사용 가능
    • protected : 동일 패키지의 모든 클래스 + 다른 패키지의 자식클래스에서 사용가능
    • default : 동일 패키지의 모든 클래스에서 사용가능
    • private : 동일 클래스에서 사용 가능

클래스의 접근 지정자

  • public, default 접근 지정자만 사용가능

클래스 접근 지정자와 생성자 접근 지정자의 연관성

  • 자동으로 추가되는 생성자의 접근 지정자는 클래스의 접근 지정자에 따라 결정된다.
    • 클래스가 public이면 자동추가 생성자도 public
  • 클래스가 public 이면 다른 패키지에서 임포트가능
  • 생성자가 public 이면 생성자를 호출해 객체를 생성가능
  • 클래스가 임포트되지 않으면 생성자는 접근 지정자와 상관 없이 호출자체를 할 수 없다.

static 제어자

  • static은 클래스의 멤버(필드, 메서드, 이너클래스)에 사용하는 제어자, 객체를 생성하지 않아도 클래스의 내부 구성 요소를 사용할 수 있도록 만든다.
  • 객체 안에 있을때 사용할 수 있는 상태가 되는 멤버 - 인스턴스 멤버
    • 인스턴스 멤버는 멤버 앞에 static이 붙어 있지 않다.
  • static이 붙은 멤버 - 정적 멤버
    • 객체의 생성없이 ‘클래스명.멤버명’만으로 바로 사용가능

인스턴스 필드와 정적 필드

class A {

int m = 3; // 객체 생성한 후 참조변수명.인스턴스 필드명 과 같이 사용가능

static int n = 5; //객체 생성없이 사용가능

}

  • 인스턴스 필드인 m 의 저장 공간은 객체 내부에 생성되므로 m 을 사용하기위해서는 반드시 객체를 먼저 생성해야 한다.
  • 저장 공간이 힙 메모리에 위치하므로 반드시 해당 저장 공간에 값을 읽거나 위해서는 참조 변수명 사용해야한다.
    • 정적 필드인 n은 클래스 내부에 저장 공간을 지니고 있기 때문에 객체 생성 없이 바로 사용가능
    • 객체 내부에 정적 필드인 n도 존재한다. 다만 n의 실제 저장 공간은 정적(static)영역 내부에 있으며, 객체 내부의 n은 실제 정적 필드의 저장 공간의 참조값만 포함 - 참조변수명으로도 사용 가능
  • 정적 필드는 객체 간 공유 변수의 성질이 있다.
    • class A {
      int m = 3;
      static int n = 5;
      }
      public class StaticField_2 {
      public static void main(String[] args) {
      A a1 = new A();
      A a2 = new A();

      	//인스턴스 필드
      	a1.m = 5;
      	a2.m = 6;
      	System.out.println(a1.m); //5
      	System.out.println(a2.m); //6
      
      	//정적 필드
      	a1.n = 7;
      	a2.n = 8;
      	System.out.println(a1.n); //8
      	System.out.println(a2.n); //8
      
      	A.n = 9;
      	System.out.println(a1.n); //9
      	System.out.println(a2.n); //9
      }
      

인스턴스 메서드와 정적 메서드

  • 인스턴스 메서드는 반드시 객체 생성후 사용가능
  • 정적 메서드는 클래스명으로도 바로 접근 가능
    • 인스턴스 매서드는 인스턴스 메서드 영역(메모리)에 위치
    • 정적 메서드는 클래스 내부(메모리)에 존재
  • 정적 매서드 내부에서는 정적 멤버만 사용할 수 있다.
  • 인스턴스 메서드 내에서는 인스턴스 멤버와 정적 멤버 모두 사용가능

정적 초기화 블록

  • 생성자에서는 정적 필드를 초기화 할 수 없다.
  • 정적초기화 블록 에서가능
    • static { //클래스가 메모리에 로딩될 때 실행되는 내용}
    • 클래스가 메모리에 로딩될 때 가장 먼저 실행된다.
  • 인스턴스 필드 초기화는 객체가 만들어지는 시점 - 생성자내에서 초기화

static main()메서드

  • JVM은 프로그램을 실행할 때 ‘실행 클래스명.main()’을 실행하므로 가장 먼저 실행되는 메서드인 main()메서드를 정적메서드로 구성한 것
profile
백엔드 개발자

0개의 댓글