• 회원가입
  • 로그인
  • 구글아이디로 로그인

[class] Java - Modifiers (수정자) - 접근제어자

2,018  
목차
  1. 수정자 (Modifiers)
  2. 접근 수정자 (Access Modifiers)
  3. 비접근 수정자 (Non-Access Modifiers)
  4. final 수정자
  5. static 수정자
  6. abstract 수정자

 

수정자 (Modifiers)

[예제]

 

public class Hz {

...

}

 


 

1.

public 수정자 경우,

클래스, 속성, 메서드, 생성자 등에 대한 접근 수준 설정에 사용.

 

2.

수정자를 크게 2그룹으로 분류 가능.

① Access Modifiers (접근 수정자)

② Non-Access Modifiers (비접근 수정자)

 

 

접근 수정자 (Access Modifiers)

[클래스]용 수정자

 

public

모든 클래스에서 접근 가능.

 

default

같은 패키지 안 클래스에서만 접근 가능. 

※ public 미지정 경우에 해당.

 


[속성・메서드・생성자]용 수정자

 

public

모든 클래스에서 접근 가능.

 

private

선언된 클래스에서만 접근 가능.

 

default

동일 패키지에서만 접근 가능.

※ 수정자 미지정 경우에 해당.

 

protected

동일 패키지 및 하위 클래스에서만 접근 가능.

 

 

※ 여기부터는 위 코드 상세 설명. 


public 수정자 [클래스 1] 

※ 모든 클래스에서 접근 가능.

 

public class Hz {

  public static void main(String[] args) {

    System.out.println("Homzzang.com");

  }

}

 


default 수정자 [클래스 2] 

※ 같은 패키지 안 클래스에서만 접근 가능.

※ public 수정자 안 붙은 경우에 해당.

 

class Hz {

  public static void main(String[] args) {

    System.out.println("Homzzang.com");

  }

}

 


public 수정자 [속성・메서드・생성자 1]

※ 모든 클래스에서 접근 가능.

 

1. C:\Users\사용자명\Hz.java

public class Hz {

  public String site = "홈짱닷컴";

  public String host = "Homzzang.com";

  public int open = 2012;

}

 

2. C:\Users\사용자명\Index.java

class Index {

  public static void main(String[] args) {

    Hz myObj = new Hz(); 

    System.out.println("사이트: " + myObj.site + " " + myObj.host);

    System.out.println("오픈년도: " + myObj.open);

  }

}

 

3. 컴파일.

C:\Users\사용자명>javac -encoding UTF-8 Hz.java

C:\Users\사용자명>javac -encoding UTF-8 Index.java

 

4. 실행.

C:\Users\사용자명>java Index

 


private 수정자 [속성・메서드・생성자 2]

※ 선언된 클래스 안에서만 접근 가능.

 

1. C:\Users\사용자명\Hz.java 생성.

public class Hz {

  private String site = "홈짱닷컴";

  private String host = "Homzzang.com";

  private int open = 2012;

  

  public static void main(String[] args) {

    Hz myObj = new Hz();

    System.out.println("사이트: " + myObj.site + " " + myObj.host);

    System.out.println("오픈년도: " + myObj.open);

  }

 

2. 실행.

C:\Users\사용자명>java -Dfile.encoding=UTF-8 Hz.java

 


default 수정자 [속성・메서드・생성자 3]

※ 동일 패키지에서만 접근 가능. (= 수정자 미지정)


1. C:\Users\사용자명\Hz.java 생성.

class Hz {

  String site = "홈짱닷컴";

  String host = "Homzzang.com";

  int open = 2012;

  

  public static void main(String[] args) {

    Hz myObj = new Hz();

    System.out.println("사이트: " + myObj.site + " " + myObj.host);

    System.out.println("오픈년도: " + myObj.open);

  }

 

2. 실행.

C:\Users\사용자명>java -Dfile.encoding=UTF-8 Hz.java

 


Protected 수정자 [속성・메서드・생성자 4]

※ 동일 패키지 및 하위 클래스에서만 접근 가능.

 

1. C:\Users\사용자명\ExHz.java 생성.

class Hz { 

  protected String site = "홈짱닷컴";

  protected String host = "Homzzang.com";

  protected int open = 2012;

}

 

class ExHz extends Hz {

  private String intro = "코딩언어 그누보드 영카트 강의";

  public static void main(String[] args) {

    ExHz myObj = new ExHz();

    System.out.println("사이트: " + myObj.site + " " + myObj.host);

    System.out.println("오픈년도: " + myObj.open);

    System.out.println("사이트 소개: " + myObj.intro);

  }

 

2. 컴파일. (※ 파일 경로 맞춘 후, 파일명으로 실행.)

C:\Users\aspire>javac -encoding UTF-8 ExHz.java

 

PS. 컴파일 시, 아래 2개의 파일이 생성됨.

Hz.class

ExHz.class

 

3. 실행. (※ 클래스 경로 맞춘 후, 클래스명으로 실행.)

C:\Users\사용자명>java ExHz

 

결과값:

사이트: 홈짱닷컴 Homzzang.com

오픈년도: 2012

사이트 소개: 코딩언어 그누보드 영카트 강의

PS. 솔그루 님 (201205) https://sir.kr/qa/388378

 

비접근 수정자 (Non-Access Modifiers)

[클래스]용 수정자

 

final

다른 클래스에 상속 불가.

 

abstract

클래스는 객체 생성에 사용 불가. 

다른 클래스에 상속돼야 접근 가능.

 


[속성・메서드]용 수정자

 

final

속성/메서드는 (재정의/수정) 불가.


static

속성/메소드는 객체가 아닌 클래스에 속함.


abstract

abstract 클래스에서만 사용 가능.

메서드에서만 사용 가능. 

메서드에는 body 없음. (예 : abstract void run ();). 

body는 상속된 하위 클래스에서 제공. 


transient

속성/메소드는 이를 포함하는 객체를 직렬화 할 때 건너뜀.


synchronized

메소드는 한 번에 하나의 스레드에서만 접근 가능.


volatile

속성값은 스레드 로컬에서 캐시 안 되고, 항상 "주 메모리"에서 읽힘.

 

 

final 수정자

 

속성값 변경 불가 설정.

 


[예제]

 

class Hz {

  final int x = 5; // 변경 불가 설정.

  final double PI = 3.14; // 변경 불가 설정.


  public static void main(String[] args) {

    Hz myObj = new Hz();

    myObj.x = 10; // 에러 유발.

    myObj.PI = 20; // 에러 유발.

    System.out.println(myObj.x);    

    System.out.println(myObj.PI); 

  }

}

 

 

static 수정자

 

static 메서드 : 객체 생성 않고도 접근 가능.

public 메서드 : 객체 생성 해야만 접근 가능.

 


[예제]

 

public class Hz {

  static void myStatic() {

    System.out.println("static 메서드");

  }

  public void myPublic() {

    System.out.println("public 메서드");

  }


  public static void main(String[] args) {

    myStatic(); // static 메서드 호출.

    Hz myObj = new Hz();

    myObj.myPublic(); // public 메서드 호출.

  }

}

 

 

abstract 수정자

 

1.

abstract 메서드는 abstract 클래스에 속함.

 

2.

abstract 메서드엔 body 없음. 

※ body는 서브클래스에서 제공.

 


[예제]

 

1. C:\Users\사용자명\Hz.java 생성.

abstract class Hz {

  public String site = "홈짱닷컴";

  public String host = "Homzzang.com";

  public int open = 2012;

  public abstract void study(); // abstract method 생성.

}


class ExHz extends Hz {

  public String code = "HTML CSS JS JQUERY PHP SQL";

  public void study() { // abstract method 정의.

    System.out.println("코딩 배우러 오세요.");

  }

}

 

2. C:\Users\사용자명\Index.java 생성.

class Index {

  public static void main(String[] args) {

    ExHz myObj = new ExHz(); 

    

    System.out.println("사이트: " + myObj.site + " " + myObj.host);

    System.out.println("오픈년도: " + myObj.open);

    System.out.println("코딩언어: " + myObj.code);

    myObj.study(); //abstract method 호출.

  }

}

 

3. 컴파일

C:\Users\사용자명>javac -encoding UTF-8 Hz.java

C:\Users\사용자명>javac -encoding UTF-8 Index.java

 

4. 실행.

C:\Users\사용자명>java Index

 



분류 제목
class Java - OOP (객체 지향 프로그래밍)
class Java - Class (클래스) / Object (객체)
class Java - Class Attribute (클래스 속성)
class Java - Class Methods (클래스 메서드)
class Java - Constructors (생성자)
class Java - Modifiers (수정자) - 접근제어자
class Java - Encapsulation (캡슐화) ※ Getter (게터) / Setter (세터)
class Java - Packages (패키지) / API
class Java - Inheritance (상속)
class Java - Polymorphism (다형성)
class Java - Inner Classes (내부 클래스)
class Java - Abstraction (추상화)
class Java - interface (인터페이스) ★
class Java - enums (이넘) - 상수 열거형 클래스
class Java - User Input (사용자 입력) - Scanner (스캐너) ★★★
class Java - Date/Time (날짜/시간)
class Java - ArrayList (어레이리스트) - 랜덤 접근 최적화 된 유사 배열
class Java - LinkedList (링크트리스트) - 반복 접근 최적화 된 유사 배열
class Java - HashMap (해시맵) - key=value 쌍의 유사 배열. (Python Dictionar…
class Java - HashSet (해시셋) - 유일값만 인정하는 유사 배열. ※ Python의 Set과 유사.
1/2
목록
찾아주셔서 감사합니다. Since 2012