Java 21(접근제한자: Private, Public, Protected, Package)

Kang.__.Mingu·2024년 5월 9일
0

Java

목록 보기
23/108

접근제한자(Access Modifier)

  • 클래스, 필드, 생성자, 메소드 작성시 클래스 외부의 접근을 제한하기 위해 사용하는 제한자
  • private
  • public
  • protected
  • package(default)

@SuppressWarnings 어노테이션

  • 컴파일러가 경고하는 내용 중 "이 부분은 경고하지마"하고 제외할 때 사용
@SuppressWarnings("내용");
  1. all : 모든 경고를 억제
  2. cast : 캐스트 연산자 관련 경고 억제
  3. dep-ann : 사용하지 말아야 할 주석 관련 경고 억제
  4. deprecation : 사용하지 말아야 할 메소드 관련 경고 억제
  5. fallthrough : switch문에서의 break 누락 관련 경고 억제
  6. finally : 반환하지 않는 finally 블럭 관련 경고 억제
  7. null : null 분석 관련 경고 억제
  8. rawtypes : 제네릭을 사용하는 클래스 매개 변수가 불특정일 때의 경고 억제
  9. unchecked : 검증되지 않은 연산자 관련 경고 억제
  10. unused : 사용하지 않는 코드 관련 경고 억제

private

  • 필드, 생성자, 메소드의 접근을 제한하기 위한 접근제한자
  • 필드, 생성자, 메소드를 클래스에서만 사용 가능하도록 설정하는 접근제한자 - 은닉화
  • 다른 클래스에서 필드, 생성자, 메소드를 사용할 경우 에러 발생

PrivateMember

public class PrivateMember {
	private int num;
	
	@SuppressWarnings("unused")
	private void display() {
		System.out.println("num = "+num);
	}
}

PrivateMemberUse

public class PrivateMemberUse {
    public void run() {
        @SuppressWarnings("unused")
        PrivateMember member = new PrivateMember();

		/*
        // private 필드, 메소드이기 때문에 에러
		member.num=100;
		member.display();
		*/
    }
}

public

  • 클래스, 필드, 생성자, 메소드의 접근을 제한하기 위한 접근 제한자
  • 클래스, 필드, 생성자, 메소드를 같은 패키지 및 다른 패키지의 클래스에서 사용 가능하도록 설정하는 접근 제한자
  • 하나의 Java 소스파일에 다수의 Java 자료형(클래스, 인터페이스, 열거형 등) 선언 가능 - 비권장
  • 하나의 Java 소스파일에는 public 접근제한자를 사용한 Java 자료형을 하나만 선언 가능
  • public 접근제한자를 사용한 Java 자료형의 이름으로 소스파일명 저장

PublicMember

public class PublicMember {
	public int num;
	
	public void display() {
		System.out.println("num = "+num);
	}
}

PublicMemberUse

public class PublicMemberUse {
	public void run() {
		PublicMember member=new PublicMember();
		
        // 접근제한자가 public이기 때문에 에러 안남
		member.num=100;
		member.display();
	}
}

PublicMemberOtherUse(다른 패키지에서 사용)

import xyz.it.access.PublicMember;

public class PublicMemberOtherUse {
	public void run() {
		PublicMember member=new PublicMember();
		
		member.num=100;
		member.display();
	}
}

protected

  • 필드, 생성자, 메소드의 접근을 제한하기 위한 접근제한자
  • 필드, 생성자, 메소드를 같은 패키지의 클래스에서 사용 가능하도록 설정하는 접근 제한자
  • 필드, 생성자, 메소드를 다른 패키지의 클래스에서 사용할 경우 에러가 발생되지만 클래스를 상속받을 경우 필드, 생성자, 메소드 사용 가능

ProtectedMember

public class ProtectedMember {
	protected int num;
	
	protected void display() {
		System.out.println("num = "+num);
	}
}

ProtectedMemberUse

public class ProtectedMemberUse {
	public void run() {
		ProtectedMember member=new ProtectedMember();
		
        // 같은 패키지면 에러 안남
        // 다른 패키지에서 사용하면 에러 나지만 클래스를 상속받을 경우 에러 안남
		member.num=100;
		member.display();
	}
}

ProtectedMemberOtherUse (다른 패키지에서 사용)

public class ProtectedMemberOtherUse {
	public void run() {
		@SuppressWarnings("unused")
		ProtectedMember member=new ProtectedMember();
		
        // 상속받지 않았기 때문에 에러
		/*
		member.num=100;
		member.display();
		*/
	}
}

ProtectedMemberOtherInheritanceUse (다른 패키지에서 사용 [상속 받았을 때])

public class ProtectedMemberOtherInheritanceUse extends ProtectedMember {
	public void run() {
		//부모클래스(ProtectedMember)의 필드 또는 메소드 사용
		num=100;
		display();
	}
}

package

  • 클래스, 필드, 생성자, 메소드의 접근을 제한하기 위한 접근 제한자
  • 클래스, 필드, 생성자, 메소드 작성시 접근 제한자 관련 키워드(private, protected, public)를 사용하지 않으면 자동으로 package 접근 제한자로 처리
  • 클래스, 필드, 생성자, 메소드를 같은 패키지의 클래스에서 사용 가능하도록 설정하는 접근 제한자
  • 클래스, 필드, 생성자, 메소드를 다른 패키지의 클래스에서 사용할 경우 에러 발생

PackageMember

public class PackageMember {
	int num;
	
	void display() {
		System.out.println("num = "+num);
	}
}

PackageMemberUse

public class PackageMemberUse {
	public void run() {
		PackageMember member=new PackageMember();
		
        // 무조건 같은 패키지 안에서만 사용
		member.num=100;
		member.display();
	}
}

PackageMemberOtherUse (다른 패키지에서 사용)

public class PackageMemberOtherUse {
	public void run() {
		@SuppressWarnings("unused")
		PackageMember member=new PackageMember();
		
        // 다른 패키지
		/*
		member.num=100;
		member.display();
		*/
	}
}

PackageMemberOtherInheritanceUse (다른 패키지에서 사용 [상속 받았을 때])

public class PackageMemberOtherInheritanceUse extends PackageMember {
	public void run() {
		//부모클래스(PackageMember)의 필드 또는 메소드 사용
		/*
		num=100;
		display();
		*/
	}
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글