남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다.
제어자 (modifier)
- 클래스와 클래스의 멤버 (멤버 변수, 메서드)에 부가적인 의미 부여
- 하나의 대상에 여러 제어자를 같이 사용 가능 (접근 제어자는 하나만)
접근제어자 : public, protected, (default), private
그 외 : static, final, abstract, native ... 등
static (클래스의, 공통적인)
제어자 | 대상 | 의미 |
static | 멤버변수 | 모든 인스턴스에 공통적으로 사용되는 클래스 변수 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능 클래스가 메모리에 로드될 때 사용 |
메서드 | 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드 static 메서드 내에서 인스턴스 멤버들을 직접 사용할 수 없음 |
class StaticTest{
static int width = 200;
static int height = 120; //클래스 변수(static 변수)
static { // 클래스 초기화 블럭
// static 변수의 복잡한 초기화 수정
}
static int max(int a, int b) { //클래스 메서드(static 메서드)
return a> b ? a : b;
}
}
final (마지막의, 변경될 수 없는)
제어자 | 대상 | 의미 |
final | 클래스 | 변경될 수 없는 클래스, 확장될 수 없는 클래스 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없음 |
메서드 | 변경될 수 없는 메서드 final로 지정된 메서드는 오버라이딩을 통해서 재정의 될 수 없음 |
|
멤버 변수 | 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 됨 | |
지역 변수 |
final class FinalTest{ //조상이 될 수 없는 클래스
final int MAX_SIZE = 10; //값을 변경할 수 없는 멤버변수 (상수)
final void getMaxSize() { // 오버라이딩할 수 없는 메서드(변경불가 )
final int LV = MAX_SIZE; //값을 변경할 수 없는 지역변수 (상수)
return MAX_SIZE;
}
}
abstratc (추상의, 미완성의)
제어자 | 대상 | 의미 |
abstract | 클래스 | 클래스 내에 추상 메서드가 선언되어 있음을 의미 |
메서드 | 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드 |
abstract class AbstractTest{ //추상 클래스 (추상 메서드를 포함한 클래스)
abstract void move(); // 추상 메서드 (구현부{}가 없는 메서드)
}
* 추상클래스의 인스턴스 생성 불가
AbstractTest a = new AbstractTEst() ; // 에러 (미완성 설계도이기 때문에)
추상클래스를 상속받아서 완전한 클래스를 만든 후에 객체 생성 가능
접근제어자 (access modifier)
private : 같은 클래스 내에서만 접근 가능
default : 같은 패키지 내에서만 접근 가능
protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능
public : 접근 제한이 전혀 없음
접근 제어자는 4개 중 한개만 사용 가능함
public > protectd > default > private (범위가 큰 순)
* 클래스 앞에는 public 아니면 default만 사용 가능
* 멤버 변수앞에는 4개다 사용 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package pkg1;
// 하나의 소스파일에 public 클래스가 하나만 있어야 함
// MyParent를 public 클래스로 만들려면
// MyParentTest는 public 지워야함
// 소스파일이름과 public클래스 이름과 일치하여야함
public class MyParent{
private int prv; // 같은 클래스
int dft; // 같은 패키지
protected int prt; // 같은 패키지 + 다른 패키지 자손
public int pub; // 접근 제한 X
public void printMembers() {
System.out.println(prv);
System.out.println(dft);
System.out.println(prt);
System.out.println(pub);
}
}
class MyParentTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyParent p = new MyParent();
//System.out.println(p.prv);
System.out.println(p.dft);
System.out.println(p.prt);
System.out.println(p.pub);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package pkg2;
import pkg1.MyParent;
class MyChild extends MyParent{ // MyParent 접근제어자가 default따라서 같은 패키지 안에서만 사용 가능
public void printMembers() {
// System.out.println(prv); // 에러 같은 클래스
// System.out.println(dft); // 같은 패키지
System.out.println(prt);
System.out.println(pub);
}
}
public class MyParentTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyParent p = new MyParent();
// System.out.println(p.prv); // 에러
// System.out.println(p.dft); // 에러
// System.out.println(p.prt); // 에러
System.out.println(p.pub);
}
}
|
cs |
'프로그래밍 > JAVA' 카테고리의 다른 글
자바의 정석 기초 ( 참조변수의 형변환 / instanceof 연산자 ) (0) | 2020.07.12 |
---|---|
자바의 정석 기초 ( 캡슐화 / 다형성) (0) | 2020.07.12 |
자바의 정석 기초 ( 패키지 / 패키지 선언 / 클래스 패스 / import문 / static import문 ) (0) | 2020.07.10 |
자바의 정석 기초 ( 참조변수 super / 생성자 super() ) (0) | 2020.07.10 |
자바의 정석 기초 ( 단일상속 / Object 클래스 / 오버라이딩 / 오버로딩 ) (0) | 2020.07.10 |
댓글