#TIL, Java Study 10일차, 접근제한자 ( Modifier )

Yimy·2020년 11월 2일
0

Java Study

목록 보기
9/15

20. 제한자 ( Modifier )

: 클래스, 인터페이스, 변수, 생성자, 메소드 앞에 붙어서 그 기능을 '제한' 하는 예약어

(1) 접근제한자 ( Access Modifier )

클래스 앞에는 public, default만 가능. (예외 :innerclass, 모듈클래스)

1) 종류

<1> public

: 제한이 없다. (다른 패키지에서 유일하게 접근 가능)
: 퍼블릭의 경우에는, 파일명과 클래스 명이 동일해야 하고, 한 파일안에 하나의 클래스만 존재 가능함.

<2> protected

: 같은 패키지 안 or (다른 패키지라면) 상속관계의 부모자원

<3> default ( ==package, == friendly )

: 같은 패키지 안에서만 가능하다. ( 다른 패키지면 X )

<4> private

: 자신의 클래스 안에서만 접근이 가능, 클래스 안에 메인이 있을 경우에만 사용이 가능하다.

2) 특징

<1> 클래스나 인터페이스 앞의 접근제한자는 public 과 default 만 가능하다.
<2> public 클래스는 파일이름과 클래스 이름이 같아야 한다.

3) 범위

  • 넓은 순위 : public > protected > default > private
  • 강력 순위 : private > default > protected > public
    ex) day10/A.java

(2) 소유제한자 ( Static )

: 붙으면 클래스 소유, 안 붙으면 객체 소유

1) 멤버와 메소드에만 붙을 수 있음.

2) Static 메소드에서는 자원접근시 자신의 클래스를 생략 가능(this)
ex) 그냥 m() = this.m(); // j = this.j;

3) 자원 접근시 '클래스 이름' 으로 접근 (다른 클래스에서는 생략이 불가)
//타 클래스에서 쓸때, C.j//클래스 이름C를 붙여줌(객체이름이 아니어도)
//타 클래스에서 객체 만든 뒤 객체이름으로도 접근이 가능하다.

4) static 자원은 메모리 1개 생성되어, 해당 클래스의 모든 객체에 '공유' 된다.
ex)객체를 만들어도, 메모리를 하나 사용하므로, 값이 공유된다.
멀티쓰레드에 취약함. : 데이터에 동시에 접근하므로, 잘못하면 데이터가 깨져버림.
ex)day10/B.java

(3) 수정 제한자 ( Final )

: 붙으면 수정을 못하게 함.
//String도 final 클래스라서 그 자식을 만들 수 없음.

1) 변수(멤버, 지역), 클래스, 메소드 앞에 붙을 수 있음.

2) 클래스에 붙으면 자식을 '못 낳고',
변수에 붙으면 초기값을 '못 바꾸고',
메소드에 붙으면 '오버라이딩을 못하게 함'

3) 지역변수에도 붙을 수 있음.
ex)day10/D.java

(4) 추상제한자 ( Abstract )

:붙으면 추상화(化)가 됨.
-> 다형성을 사용하기 위해서 추상화를 사용함.

1) 클래스와 메소드 앞에서만 붙을 수 있다.
2) 하나 이상의 '추상메소드' 만 가지고 있어도, 그 클래스는 '추상클래스' 가 되어야 한다.
3) 추상 클래스의 객체는 완벽한 자식 클래스를 만들어서, 그 객체를 '형변환' 하여 생성함.
cf )
추상 클래스 : abstract가 붙은 클래스
추상 메소드 : abstract가 붙은 메소드
ex) day10/E.java

(5) 기타 제한자

Synchronized ( 쓰레드 ), transient ( 보안 ), native ( OS자원 )

(6) 식별자 ( Identifier )

: '프로그래머가 임의로' 설정하는 패키지, 클래스, 변수, 메소드의 '이름'

(1) 규칙 : JVM이 컴파일 해주는지 안해주는지 차이.

1) 숫자가 맨 앞에 나올 수는 없다.
2) 특수문자 와 $만 가능하다.
3) 길이의 제약은 없음.
_ex) day10/F.java

(2) 관례 : 개발자들 사이에서 지켜지는 관례

1) 클래스와 인터페이스 이름은 첫 문자를 대문자로 시작
2) 상수는 전체문자를 대문자로 쓴다.
ex) MAXVALUE(이미 정해진 숫자는 상수로 한다. > 대문자로 표기)
3) 패키지, 변수, 메소드의 이름의 첫 문자는 소문자로 시작한다.
4) 2개 이상의 단어의 조합에서는 다음 단어의 첫문자를 '대문자' 로 하거나, '
'로 처리한다.
5) 와 $는 자제함.
6) 의미있는 단어로 생성함. (!= 코드 난독화 ( code obfuscation ) )
_ex) day10/G.java

profile
Better version

0개의 댓글