본문 바로가기
AWS(산대특)

DAY 7 - JAVA

by dkdlxl 2024. 1. 28.

접근 제어자

: 클래스, 필드, 메서드에 대해서 외부 접근에 대한 제어를 하는 것

★ private : 같은 클래스 내우베어서만 접근 가능

default(생략) : 클래스 앞에 접근제어자가 없으면 default 클래스로 같은 패키지 내부에서만 접근 가능

protected : 같은 패키지 내부 혹은 외부 패키지의 자손 클래스에서만 접근 가능

★ public : 모든 패키지에서 접근 가능, 

class AccessModifier { 
//  int C_veriable; // 접근제어자가 default

	void method () {
		C_AccessModifier instance = new C_AccessModifier();
	}
	
}

* C_AccessModifier 클래스는  접근 제어자가 private 이기 때문에 외부 클래스에서 접근이 불가능

import ch02.C_AccessModifier; 

class SubClass extends C_AccessModifier {
	
	void method () {
		super.protectedVariable = 0;
	}
}

 

*  C_AccessModifier 클래스는 접근 제어자가 public 이기 때문에 외부 패키지에서 import가 가능 

// C_AccessModifierSub 클래스와 같이 참조 
public class C_AccessModifier {
	private int privateVariable;
	int defaultVariable; 
	protected int protectedVariable;
	public int publicVariable; 
	
	void method () {
		// C_AccessModifier 클래스와 privateVariable 필드는
		// 접근 제어자가 private 이기 때문에 클래스 내부에서만 사용 가능 
		this.privateVariable = 0;
	}
	
}

 

 

* ch02.AccessModifier 클래스는 접근 제어자가 default이기 때문에 외부 패키지에서 import가 불가능

import ch02.AccessModifier;
public class C_AccessModifierSub {
	
	public static void main(String[] args) {
		
		C_AccessModifier instance = new C_AccessModifier();
		
		// C_AccessModifier 클래스와 privateVariable 필드는
		// 접근 제어자가 private이기 때문에 외부 클래스에서 접근이 불가능
//		instance.privateVariable = 0;
		
		// C_AccessModifier 클래스와 defaultVariable 필드는
		// 접근 제어자가 default이기 때문에 외부 패키지에서는 접근이 불가능
//		instance.defaultVariable = 0;
		
		// C_AccessModifier 클래스의 protectedVariable 필드는
		// 접근 제어자가 protected이기 때문에 외부 패키지에서는 접근이 불가능
		// 단, C_AccessModifier 클래스를 확장한 클래스에서는 접근이 가능 
//		instance.protectedVariable = 0;
		
		// C_AccessModifier 클래스의 publicVariable 필드는
		// 접근 제어자가 public이기 때문에 외부 패키지에서는 접근이 가능
		instance.publicVariable = 0;
		
//		instnace.a = 0; // 정의되지 않아서 생기는 컴파일러 에러 	
	
    }
}

 

비접근 제어자(기타 제어자)

: 접근 제어자와 무관하게 동작을 제어하는 것

final 제어자

- 클래스 : final 제어자가 붙은 클래스는 확장(상속)할 수 없음

- 메서드 : final 제어자가 붙은 메서드는 오버라이딩할 수 없음

- 변수 : final 제어자가 붙은 변수는 재할당할 수 없음 

final class FinalModifier1 {
	int variable;
}

 

* class에 final을 붙이면 확장할 수 없다.

class subModifier1 extends FinalModifier1 { } (X)
class FinalModifier2 {
	final void method () { 
    // void method 앞에 final 메소드를 붙이지 않은 것은 오버라이딩을 할 수 없다.
    }
}
class FinalModifier3 {
	final int variable = 10;
	void method () {
	}
}

* (variable = 20;을 부여해줘도) 이미 final로 값을 할당해줬기 때문에 다른 값을 할당해 줄 수 없음 

 

static 제어자 

- 메서드 : static 제어자가 붙은 메서드는 인스턴스 생성없이 클래스로 바로 호출 가능

- 변수 : static 제어자가 붙은 변수는 인스턴스 생성없이 클래스로 바로 접근 가능 

class staticModifier {
	static int variable;
	static void method () {};
}

 

제어자의 조합 

class Combination {
	
	// public + static + final (주로 사용)// 쓰고 싶은 메시지를 저장하여 사용?, 자주사용되는 조합이다.
	public static final int NUMBER = 10; 
	
	// 메서드에서 private + final (사용 X)
	private final void method () {} // 작성은 가능, private 상태에서는 final을 붙일 의미가 없다.
	
	// 메서드에서 private + abstract X (서로 상충) // 외부에서 접근 불가, 단, 반드시 오버라이드를 해야함 말이 안됨
	// 클래스와 메서드에서 final + abstract X (서로 상충)
public class D_Modifier {

	public static void main(String[] args) {
		staticModifier.variable = 0;
		staticModifier.method();
	}
}

 

 

'AWS(산대특)' 카테고리의 다른 글

DAY 9 - JAVA  (0) 2024.01.30
DAY 8 - JAVA  (0) 2024.01.29
DAY 6 -JAVA  (0) 2024.01.25
객체지향 프로그래밍 보충  (0) 2024.01.25
DAY 5 -JAVA  (0) 2024.01.24