728x90


이 강의는 자바의 프로젝트를 어떻게 만드는지, 또한 빌드를 어떻게 하는지에 대한 강의를 진행하지 않는다.

그러나 자바의 기본적인, 그리고 자바에 필수적인 기능들도 분명 존재하고 이 블로그엔 그 작업에 필요한 포스팅도 함께 제공하고 있다.

그 정보를 확인하고 싶다면 여기를 참조하라. 양이 조금 되고 현재진행형으로 늘어나고 있으므로 페이지내의 찾기(ctrl+f 나 cmd+f)로 찾아보도록하자.


자바에서는 클래스를 만들때 비슷한 클래스끼리 모아서 저장한다.

그래야 관리하기가 더욱 수월하기 때문이다.

논리적으로 비슷하거나 서로 의존을 하는 클래스끼리 묶어두는게 보통이다.

패키지를 만드는 방법은 여기를 참조하라. 사실 참조 안해도 만드는 방법은 쉽다.



패키지를 만들면 default package말고 밑에 새로운 패키지가 형성된다.


디폴트 패키지라는것은 우리가 패키지를 만들지 않았을때 자동으로 인식하는 패키지이다.

이 패키지는 다른 패키지와는 조금 다른 특성을 지니고 있다.

이는 아래에 설명하도록 하겠다.


어쩃든 우리는 패키지를 새로 만들었다.

패키지안에 시험용으로 클래스 몇개를 배치해보자.

내용은 기술하지 않아도 상관없다.



패키지로 Computer와 Keyboard를 만들었다. 이 둘은 이제 저 패키지의 소속이다.

Computer를 한번 확인해봐라 아마 아래와 같이 적혀있을 것이다.


package com.jiharu.package_test.core;

public class Keyboard {

}


여기서 보면 새로운 한줄이 있다. 바로 package로 시작하는 부분이다.

이 명명으로 인하여 이 클래스는 이 패키지의 소속이라는 것을 알려준다.


package 패키지명


이때까지 우리는 저런 구문이 없었는데 원래 디폴트 패키지는 저러한 구문이 없다.

즉 이름이 있는 클래스만이 저러한 구문을 갖고 소속을 가질 수 있다.

이제 Computer클래스에서 Keyboard클래스를 호출해보자.


package com.jiharu.package_test.core;

public class Computer {
public Keyboard k;
}


Computer에서 Keyboard를 호출하는데 아무 제약이 없다.

왜냐하면 같은 패키지내의 클래스들이기 때문이다.

그러면 다른 패키지인 Main에서 호출은 어떨까?

Main에서 Computer는 그냥 호출할 수 없다.

호출하려면 아래와같은 형식으로 호출해야한다.


public class Main {
public com.jiharu.package_test.core.Computer c;

public static void main(String[] args) {

}
}


다른 패키지의 클래스를 호출하려면 위처럼 사용해야한다.

패키지명까지 함께 호출해야한다.


public com.jiharu.package_test.core.Computer c;


굉장히 피곤한 사용법이다. 패키지명을 다적고나서 클래스를 호출하는것인데 더 쉬운방법이 있다.

사실 여러분이 지금껏 아무것도 모르가 사용했던 방식이다.

바로 import다.


import com.jiharu.package_test.core.Computer;

public class Main {
public Computer c;

public static void main(String[] args) {

}
}


최상단에 보면 import를 사용했다. 이 방법은 총 2가지의 사용방식이 있다.


import 사용 유형


1-import com.jiharu.package_test.core.Compute;

2-import com.jiharu.package_test.core.*;

아마 맨 위의 import를 2번같은 형식으로 바꿔도 작동할 것이다.

1번과 2번의 의미는 다르다.

1번의 경우 해당 패키지의 Computer만 명시적으로 쓴다는 이야기이다.

2번의 경우 해당 패키지의 모든 클래스를 명시적으로 쓴다는 이야기가 된다.

따라서 2번으로 사용할 경우 같은 패키지에 들어있는 Keyboard도 호출없이 사용할 수 있다.


이렇게 보면 import가 더 좋아보인다. 그리고 당연히 import를 써야겠구나 싶겠지만 사실 두 상황은 캐이스바이 캐이스이다.

아래같은 상황을 가정해보자.



패키지가 총 2개가 있다. ~core패키지와 ~util패키지내에 똑같은 클래스가 있다고 생각해보자.

여기서 우리는 두개의 Computer를 모두 호출하고 싶다. 이경우에 둘다 부르려면 어떻게 할까?

이 경우 하나는 import를 가져올 수 있다. 그러나 다른 하나는 import를 사용할 수 없다.

왜냐하면 어떻나 Computer을 쓸지 구별할 수 없기 때문이다.

따라서 아래같은 방식으로 하나는 힘들게 쓸 수 밖에 없다.


import com.jiharu.package_test.core.Computer;

public class Main {
public Computer c1;
public com.jiharu.package_test.util.Computer c2;

public static void main(String[] args) {

}
}


여기서 Computer가 Main을 호출할 수 있을까?

그것은 불가능하다. 이게 기본 패키지가 일반 패키지와의 차이점이다.

기본패키지내의 클래스는 다른 패키지가 사용할 수 없다.


package의 명명규칙


패키지의 경우 명명규칙이 있다.

아무렇게나 짓는것이 아니다.


package naming rule


1.패키지명은 영어로 적는다.

2.대문자를 사용할 수 있지만 대문자는 권장되지 않는다.(라기보다 쓰는경우 본적없음)

3.공백은 언더스코어(_)로 끊는다. (ex - test_class)

4.회사나 기관의 경우 본인의 url을 뒤집은 뒤 프로젝트 명(어플리케이션 명)을 붙힌다.(ex - 네이버의 abc 어플리케이션 : com.naver.abc)

5.4번을 유지한 후 각각의 클래스 묶음들의 기능에 맞게 패키지명을 추가로 붙힌다.(ex - com.naver.abc.util)

6.url이 없을 경우(개인 등) 보통 com.본인 아이디.어플리케이션 명 등으로 사용한다.

7.6번의 경우 메일을 뒤집는 경우도 있다. (ex - com.naver.jiharu.abc : naver의 jiharu의 abc어플리케이션)


'Programming > Java' 카테고리의 다른 글

[Java-15]접근 제한자  (0) 2017.10.22
[Java-14]초기화와 초기화블럭(Initialize Block)  (0) 2017.10.21
[Java-12]static  (0) 2017.10.05
[Java-11]오버로딩(feat.디폴트 생성자)  (0) 2017.10.04
[Java-10]생성자와 this  (0) 2017.10.01

+ Recent posts