다양한 접근 제한자

접근 제한자는 다양한 클래스간에 데이터를 공유하는 과정에서 접근할 수 있는 영역이 어디까지인지를 설정하기 위해 사용됩니다.

 

적절한 접근제한은 보안에 있어서 매우 효과적인 역할을 수행합니다.

 

접근제한자의 종류와 영역은 아래와 같습니다.

 

접근 제한자 적용시킬 수 있는 대상 적용범위
public 필드, 생성자, 메소드, 클래스 모든 접근 가능
protected 필드, 생성자, 메소드 동일 패키지 내 객체와 상속 관계의 객체
default <입력 생략시 default> 필드, 생성자, 메소드, 클래스 동일 패키지 내 객체
private 필드, 생성자, 메소드 현재 객체 내에서만

 

 

다른 패키지의 클래스를 호출하기

유사한 역할을 갖고있는 녀석들을 묶어 우리는 하나의 '패키지'로 관리하는것은 아실겁니다.

 

WorkSpace에서 확인해보면, 실제로도 별도의 폴더를 갖는 것을 볼 수 있습니다.

 

만약 위와같은 형태로 구조가 되어있고, LangMain.java에서 sample.java에 존재하는 클래스를 하나 갖고와 사용하려고 한다고 가정하겠습니다.

 

먼저 sample.java의 코드입니다.

 

간단하게 Sample이라는 클래스에 data라는 변수가 존재하는 것을 볼 수 있습니다.

 

이녀석을 LangMain.java에서 불러오기 위해서는 [ import ]를 통해 먼저 호출을 해줘야합니다.

 

import를 통해 호출하는 방식은 아래와 같습니다.

 

  • 특정 패키지의 하나의 클래스 호출하기

특정 클래스만 호출하기

 

  • 특정 패키지의 모든 클래스 호출하기

 

모든을 의미하는 별(*)을 이용하면 특정 패키지 이하의 모든 클래스를 호출합니다.

 

이렇게 호출된 클래스는 해당 코드에 존재하는 클래스와 동일한 방식으로 사용할 수 있습니다.

 

 

다만, 만약여러개의 클래스가 호출된 상태에서 클래스의 이름이 동일할 경우 import에서 단일 클래스를 호출했던것과 마찬가지로 패키지명을 포함한 모든 경로를 적어줘야합니다.

  1. ds3goj 2020.11.20 20:03

    도움되는 글 매우 잘 배우고 가요

1. Final 필드

Java에서는 Final이라는 통해 한번 정의된 변수의 값이 수정되지 못하도록 만들 수 있습니다.

 

class Math{

    final pi = 3.14;

    //final [타입] [필드명];

}

 

위와같은 형태로 만들어 줄 수 있습니다. 만약 클래스 내에서 필드(변수)를 초기화하지 않았다면, 단 한번 변수를 초기화 할 수 있습니다.

 

일반적으로 이와같은 녀석을 '상수'라고 부르는 경우가 종종있습니다.

 

왜냐하면, 수정이 불가능하기 때문이죠.

 

하지만, C언어에서 '상수'를 사용해본 경험이 있으신 분이라면, 조금 이상하다는 느낌을 받을 수 있습니다.

 

왜냐하면, 일반적으로 '상수'라는 녀석은 '전역변수'처럼 사용되기 때문입니다.

 

 

즉, 위와같이 클래스 내에서 final이라는 녀석을 통해 선언된 필드의 값은 클래스의 객체별로 서로 다른 값을 갖을 수 있다는 문제가 있습니다.

 

 

 

2. Static Final

위의 문제점을 해결하기 위하여 앞에 Static이라는 녀석을 붙여줍니다.

 

이전장에서, 그리고 처음 [JVM 메모리 관리]부분에서 언급했던것처럼 static이라는 녀석은 [메소드 영역]에서 관리되기 때문에 전역변수처럼 사용됩니다.

 

즉, static final로 선언된 값은 코드 전역에서 불편의 값을 갖는 필드, 즉 '상수'라고 불릴만한 자격을 갖게됩니다.

 

 

 

상수를 선언할 때에는 항상 

 

static final 필드 (=초기값);

 

위와같은 형태로 만들어줄 것! 꼭 기억합시다.

+ Recent posts