패키지란 무엇인가

오라클 문서에서는 패키지에 대해 access protection 과 namespace 관리를 제공하는 것으로 설명하고 있다. 

namespace를 사용함으로써 얻을 수 있는 이점은 여러 사람이 협업 시 클래스의 이름이 중복되더라도, 이를 구분할 수 있기에 사용이 가능하다.

 

가령 동일한 패키지 내에서는 같은 이름의 클래스를 만들수가 없는데,  패키지를 사용함으로써 같은  클래스명이 사용될 수 있다. 물론 사용 시에는 이에 대한 구분을 하기 위해 패키지를 import 해주거나, FQN(Fully Qualified Name)을 사용해야 한다. 

 

 

import란 무엇인가?

# import

위에서 말한 import 를 사용하지 않고 Fully Qualified Name을 사용하면 보다시피 인스턴스 생성시 아래와 같이 비효율성이 증가한다. 

 

import packages.differentpackage.nested.*;

public class main {

    public static void main(String[] args) {
        // Using FQN(Fully Qualified Name) on packages.differentpackage.nested
        packages.differentpackage.nested.TestClass FQN = new packages.differentpackage.nested.TestClass();
        // Using "import" on packages.differentpackage.nested
        TestClass IMPORT = new TestClass();
        // For explaining import .* 
        packages.differentpackage.TestClass AnotherClass = new packages.differentpackage.TestClass();
    }
}

이를 해결하고자 import를 사용하는데, 이때 패키지의 멤버 또는 패키지 전체를 import 할 수 있다. 다만 주의할 점으로는, import 는 해당 패키지내의 멤버들만을 의미한다. 

예시에서의 import packages.differentpackage.nested.*  는 packages.differentpackage 내의 TestClasss는 import 하지 않기 때문에 주의를 해야한다. 

 

# static import

오라클에서 Math 관련 내용을 사례로 제시하니 이를 활용하여 설명하면 사용하는 목적 자체는 static한 메소드나 변수를 사용하기 위함이다. 

 // Test w/ and wo/import static
int radius = 1;

// Case 1 : without import static
// Math math = new Math();   // Error : Math's constructor is private

// So we need to add "import static"
double RoundLengthOfCircle = PI * radius;

클래스패스?

클래스패스는 클래스를 찾기위한 경로(PATH)를 의미한다. 

IDE가 정말 고맙다..ㅠㅠㅠ

"."은 현재 경로를 의미하고, ":"을 통해서 필요한 클래스 경로를 추가하면 된다. 

그러나 이것은 굉장히 뻘짓이기 때문에, IDE를 사용하면, java 컴파일 및 실행에 필요한 경로를 추가해준다. 

 

접근지시자?

앞에서 클래스에서도 다루었지만, 접근제어자는 public, protected, default, private 가 존재하며 변수, 메소드, 클래스에 사용하여 접근을 제한하는 데에 그 목적이 있다. 

 

public 은 누구나 접근이 가능

protected 는 동일패키지 혹은 상속받았을 경우 접근이 가능 

default인 경우 동일패키지인 경우에만 접근이 가능 

private인 경우 해당 클래스에서만 접근이 가능하다. 

 

'가치코딩 [Java] > 기초문법' 카테고리의 다른 글

[Java 문법] 어노테이션  (0) 2021.02.06
[Java 문법] enum  (0) 2021.02.04
[Java 문법] 예외처리  (0) 2021.01.21
[Java 문법] 클래스  (0) 2020.12.18
[Java 문법] 선택문 및 반복문  (0) 2020.12.08

+ Recent posts