: 클래스, 인터페이스, 변수, 생성자, 메소드 앞에 붙어서 그 기능을 '제한' 하는 예약어
클래스 앞에는 public, default만 가능. (예외 :innerclass, 모듈클래스)
: 제한이 없다. (다른 패키지에서 유일하게 접근 가능)
: 퍼블릭의 경우에는, 파일명과 클래스 명이 동일해야 하고, 한 파일안에 하나의 클래스만 존재 가능함.
: 같은 패키지 안 or (다른 패키지라면) 상속관계의 부모자원
: 같은 패키지 안에서만 가능하다. ( 다른 패키지면 X )
: 자신의 클래스 안에서만 접근이 가능, 클래스 안에 메인이 있을 경우에만 사용이 가능하다.
<1> 클래스나 인터페이스 앞의 접근제한자는 public 과 default 만 가능하다.
<2> public 클래스는 파일이름과 클래스 이름이 같아야 한다.
: 붙으면 클래스 소유, 안 붙으면 객체 소유
1) 멤버와 메소드에만 붙을 수 있음.
2) Static 메소드에서는 자원접근시 자신의 클래스를 생략 가능(this)
ex) 그냥 m() = this.m(); // j = this.j;
3) 자원 접근시 '클래스 이름' 으로 접근 (다른 클래스에서는 생략이 불가)
//타 클래스에서 쓸때, C.j//클래스 이름C를 붙여줌(객체이름이 아니어도)
//타 클래스에서 객체 만든 뒤 객체이름으로도 접근이 가능하다.
4) static 자원은 메모리 1개 생성되어, 해당 클래스의 모든 객체에 '공유' 된다.
ex)객체를 만들어도, 메모리를 하나 사용하므로, 값이 공유된다.
멀티쓰레드에 취약함. : 데이터에 동시에 접근하므로, 잘못하면 데이터가 깨져버림.
ex)day10/B.java
: 붙으면 수정을 못하게 함.
//String도 final 클래스라서 그 자식을 만들 수 없음.
1) 변수(멤버, 지역), 클래스, 메소드 앞에 붙을 수 있음.
2) 클래스에 붙으면 자식을 '못 낳고',
변수에 붙으면 초기값을 '못 바꾸고',
메소드에 붙으면 '오버라이딩을 못하게 함'
3) 지역변수에도 붙을 수 있음.
ex)day10/D.java
:붙으면 추상화(化)가 됨.
-> 다형성을 사용하기 위해서 추상화를 사용함.
1) 클래스와 메소드 앞에서만 붙을 수 있다.
2) 하나 이상의 '추상메소드' 만 가지고 있어도, 그 클래스는 '추상클래스' 가 되어야 한다.
3) 추상 클래스의 객체는 완벽한 자식 클래스를 만들어서, 그 객체를 '형변환' 하여 생성함.
cf )
추상 클래스 : abstract가 붙은 클래스
추상 메소드 : abstract가 붙은 메소드
ex) day10/E.java
Synchronized ( 쓰레드 ), transient ( 보안 ), native ( OS자원 )
: '프로그래머가 임의로' 설정하는 패키지, 클래스, 변수, 메소드의 '이름'
1) 숫자가 맨 앞에 나올 수는 없다.
2) 특수문자 와 $만 가능하다.
3) 길이의 제약은 없음.
_ex) day10/F.java
1) 클래스와 인터페이스 이름은 첫 문자를 대문자로 시작
2) 상수는 전체문자를 대문자로 쓴다.
ex) MAXVALUE(이미 정해진 숫자는 상수로 한다. > 대문자로 표기)
3) 패키지, 변수, 메소드의 이름의 첫 문자는 소문자로 시작한다.
4) 2개 이상의 단어의 조합에서는 다음 단어의 첫문자를 '대문자' 로 하거나, ''로 처리한다.
5) 와 $는 자제함.
6) 의미있는 단어로 생성함. (!= 코드 난독화 ( code obfuscation ) )
_ex) day10/G.java