[Java] 제어자, 지정자(modifier), 캡슐화

2023. 12. 23. 23:04·Java

제어자, 지정자


:클래스, 클래스멤버(변수,메서드선언부)에 사용되어 부가적 의미 부여함.

 

접근 지정자 : public, protected, (default), private  //넷 중 하나만 선택가능
그외 지정자 : static, final, abstract, native, transient, synchronized, volatile, strictfp //복수선택 가능

 

접근지정자(Access Modifier)


:사용(접근) 권한 지정

- 기준 : 패키지, 클래스

- 선언 : 클래스, 멤버변수, 멤버메서드, 생성자

 

4가지 중에서 한개만 선언 가능(중복 선언 불가)

1. public
	- 제한x, 어디에서든 사용 가능

2. protected
	- 같은 패키지 내에서만 사용 가능
	- 단, 상속 관계에서는 다른 패키지의 자손클래스 접근 가능

3. default
	- 같은 패키지 내에서만 사용 가능
	- Java 내에서는 생략

4. private
	- 같은 클래스 내에서만 사용 가능

 

▸접근 지정자 사용 이유

1. 외부로부터 데이터 보호 -> 캡슐화

2. 내부에만 사용, 굳이 외출 노출 필요x  (필요부분만 쓰니 범위 좁혀줄 수 있음)

 

캡슐화


: 외부로 부터 클래스 내부 선언된 데이터를 보호하기위함.

외부에서 접근하는데 정보를 은닉하고 내부 데이터를 보호 메서드를 통해서만 접근.

 

public class Test{
	Public int score; //1~100점까지 여야함.
}

//but,

Test t = new Test();
t.score = 199;  //이런식 직접 접근은 잘못된 값 막을 방법이 없음
public class Test{
	private int score; //접근지정자 private로 외부 접근 막음.
    
    //메서드 통해 간접접근 (Sourse- Generate getters and setters 쓰면 간단)
    public int getScore() { 
		return score;
	}

	public void setScore(int score) {
		if(score<0 || score>100) return;
		this.score = score;
	}
}

public class Main {
	public static void main(String[] args) {
		Test t = new Test();
		t.score = 92;  //에러. 접근지정자 private로 접근 불가.
		t.setScore(92);
		System.out.println(t.getScore()); //92
    }
}

 

그외 지정자


- 부가적인 의미

 

1. static

: 공통의, 클래스의

- 객체를 생성하지 않고 사용 가능

- 하나의 프로그램내에서 공통으로 사용 할 때

- 선언위치

  ▸멤버변수 : 클래스변수,static 변수 (cv)

                    클래스명.클래스변수명

  ▸멤버메서드 : 클래스메서드 (cm)

                       클래스명.메서드명();

public class Test {
	static int score; //클래스 변수 cv

	static { //클래스 초기화 블럭 
	}
	
	static int add(..) {  //클래스 메서드, iv,im 사용불가
		...
	}
}

2. final

: 마지막의 , 변경할 수 없는

- 선언위치

  ▸ 클래스 : 상속(extends) 금지, 조상될 수 x

  ▸ 메서드  : 오버라이딩 금지

  ▸ 멤버변수 :  상수

  ▸ 지역변수 : 상수

final class Test {//상속x
	
	final int SCORE = 1; //상수
	
	final void add() { //오버라이딩x
		final int X =10; //상수
		...
	}
}

3. abstract

: 추상적인, 미완성의 -> 객체생성 불가

- 선언위치

  ▸ 클래스 : 추상 클래스(추상메서드 포함한 클래스), 상속(extends) 해서 사용

     -> 객체생성 불가

     -> 데이터타입으로 선언은 가능

     - 일반(구현) 클래스 처럼 멤버변수, 멤버메서드, 생성자, 추상메서드를 가질 수 있음

접근지정자 abstract 클래스명 {}

 

  ▸ 메서드  : 추상 메서드(구현부{} 없는 메서드), 오버라이딩 해서 사용

접근지정자 abstract 메서드명() ;

 

-그 외 지정자는 의미만 맞으면 두개 이상 가능

public static final int NUM=5; //Ok

public final abstract test(){} //Error

'Java' 카테고리의 다른 글

[Java] 매개변수의 다형성  (0) 2023.12.23
[Java] 다형성(Polymophism), 참조변수 형변환, instanceof연산자  (0) 2023.12.23
[Java] Object 클래스, super, super()  (0) 2023.12.20
[Java] 오버라이딩(OverRiding)  (0) 2023.12.20
[Java] 상속(Inheritance), 포함(composite)  (0) 2023.12.20
'Java' 카테고리의 다른 글
  • [Java] 매개변수의 다형성
  • [Java] 다형성(Polymophism), 참조변수 형변환, instanceof연산자
  • [Java] Object 클래스, super, super()
  • [Java] 오버라이딩(OverRiding)
Naah
Naah
  • Naah
    blueprint
    Naah
  • 전체
    오늘
    어제
    • 분류 전체보기 (106)
      • Java (28)
      • Kotlin (0)
      • TypeScript (7)
      • React (22)
      • Next.js (1)
      • Spring (22)
      • JPA (12)
      • Spring Data JPA (6)
      • Querydsl (1)
      • Error (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • manage
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Naah
[Java] 제어자, 지정자(modifier), 캡슐화
상단으로

티스토리툴바