Study/JAVA

[JAVA] 8장 - 클래스 외부 구성 요소

오구민 2022. 10. 2. 19:51

솔직히 말하자면... 꾸준히 공부하는 건 굉장히 힘들다...

워낙 잠이 많아서 졸리기도 하고... 놀고도 싶고...

하지만 공부할 거다... 기가지니3 300번 리부팅해야 한 번 잡히는 이슈도 잡았는데 이거를 못 하겠니...

 

 

1. 패키지

1.1 패키지 개념

패키지는 비슷한 목적으로 생성된 클래스 파일들을 한곳에 모아 둔 폴더를 말한다.

그림 1-1 스터디용 자바 프로젝트 구조
그림 1-2 코드 첫 줄에는 패키지 명이 명시돼 있다.

그림 1-1과 1-2는 스터디 시의 이클립스 화면을 크롭한 것이다.

따로 지정 없이 패키지와 소스를 만들면, 패키지는 src에, java 소스 파일은 패키지 내에 만들어지는 것을 볼 수 있다.

소스 코드의 경우 생성 후 맨 위에 패키지 명이 명시돼 있다.

 

1.2 임포트

임포트는 다른 패키지 내의 클래스를 사용하기 위한 문법 요소로, 소스 코드상에서 패키지 구문의 다음 줄에 위치한다.

다른 패키지의 클래스는 크게 두 가지 방법으로 사용할 수 있다.

 

  1.2.1 클래스의 풀네임 사용

  • 첫 번째 방법은 클래스의 풀네임을 사용하는 것이다.
  • '패키지명.클래스명'으로 풀네임을 명시하면 사용이 가능하다고 한다. 밑은 예제다.
// # main Code
package java_study_001;

public class Java_001 {
	public static void main(String[] args) {
		//객체 생성
		//A a = new A(); <<오류난다
		java_study_import.import_001 a = new java_study_import.import_001();
		
		//멤버 활용
		System.out.println(a.m);
		System.out.println(a.n);
		a.print();
	}
}
// # import Code
package java_study_import;

public class import_001 {
	public int m = 3;
	public int n = 4;
	public void print() {
		System.out.println("임포트");
	}
}

 

  1.2.2 임포트 사용

  • 위에처럼 사용하게 되면 힘들 것이다... 효율적으로 다른 패키지의 소스코드를 쓰려면 임포트를 사용하는 게 좋다.
  • import 패키지명.클래스명 을 소스코드에 기재하면 손쉽게 다른 패키지 내 클래스를 임포트할 수 있다.
package java_study_001;

import java_study_import.import_001;

public class Java_001 {
	public static void main(String[] args) {
		//객체 생성
		//A a = new A(); <<오류난다
		import_001 a = new import_001();
		
		//멤버 활용
		System.out.println(a.m);
		System.out.println(a.n);
		a.print();
	}
}
💡 실제 임포트되는 대상은 소스 코드(.java)가 아닌 bin 폴더에 위치한 컴파일이 완료된 바이트 코드(.class)라고 한다. 만약 패키지 내에 하위 패키지가 있다면, *을 통해 상위 패키지 임포트 시, 하위 패키지는 임포트되지 않는다. 모두 임포트하고 싶다면 하위 패키지 임포트를 따로 작성해주는 것이 좋다.

 

 

2. 외부 클래스

2.1 외부 클래스 개념

외부 클래스는 public 클래스의 외부에 추가로 정의한 클래스를 말한다.

1개의 자바 소스 파일에는 최대 1개의 public 클래스만 존재할 수 있고, 그 클래스명은 파일 명과 일치해야 한다.

즉, 1개의 소스 파일 안에서 public 클래스를 제외한 모든 클래스는 외부 클래스가 되는 것이다.

이는 다른 패키지에 임포트할 수 없기 때문에 외부 클래스는 패키지 안에서만 사용 가능하다.

 

  2.1.1 1개의 소스 파일에 외부 클래스 구성

  • 앞 선 글에서 사용한 방법이다.
package java_study_001;

class A {
	int m = 3;
	int n = 4;
	
	void print() {
		System.out.println(m + ", " + n);
	}
}
public class Java_001 {
	public static void main(String[] args) {
		A a = new A();
		a.print();
	}
}

 

  2.1.2 외부 클래스를 별도의 파일로 분리

  • 별도의 파일로 분리한 외부 클래스를 import로 활용했다.
// # main Code
package java_study_001;

import java_study_import.import_001;

public class Java_001 {
	public static void main(String[] args) {
		import_001 a = new import_001();
		a.print();
	}
}
// # import Code import_001.java
package java_study_import;

public class import_001 {
	int m = 3;
	int n = 4;
	public void print() {
		System.out.println(m + ", " + n);
	}
}