목차
- 수정자 (Modifiers)
- 접근 수정자 (Access Modifiers)
- 비접근 수정자 (Non-Access Modifiers)
- final 수정자
- static 수정자
- 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
최신댓글