Java

7. 클래스 탐구

문정훈 2022. 1. 20. 23:48

1. 내가 보려고 정리한 내용

- 패키지에는 .java 파일을 만들 수 있다. 그리고 

.java 파일안에서는 여러 개의 클래스를 선언 할 수 있는데 public 클래스는 .java파일 명으로 단 하나 만들 수 있다. 

 

- 메인함수가 포함될 클래스는 꼭 public클래스에서 선언되야한다.

 

- 패캐지에는 여러 개의 .java파일이 존재 하는데 각 파일에는 public 클래스가 하나씩 존재한다 즉 파일 개수만 큼 존재한다. 

 

- 한 패키지에서는 클래스들을 서로 공유 할 수 있다. 

 

- 다른 패키지에 각각 클래스가 존재하는 상황: 한 패키지의 .java파일의 클래스에서 다른 패키지의 선언된 클래스를 사용할 시 import선언을 통해 패키지를 선언해 주어야 한다. 
import 상위패키지.하위패키지.클래스(.*) 
public선언된 클래스만 사용할 수 있다. 아무 선언도 안되있는 클래스나 메소드는 default처리 되어 패키지 사이에서는 공유가 안되기 때문이다.

 

정리 => 다른 패키지에 있는 클래스를 사용하는 것은 import로 패키지를 선언 한 후 다른 패키지의 public 클래스만 사용할 수 있다. 

 

- 하나의 예시로 설명

예 Scanner sc=new Scanner(System.in);

 

여기서 Scanner 클래스를 사용하기 위해서는 이 클래스는 다른 패키지에 선언된 클래스 이므로 import java.util.*; 이렇게 import선언을 해주어야 한다. 또한 클래스를 사용하는 것은 이 클래스는 public Scanner~이런식으로 선언된 public 클래스란 것이다. 아마 이 Scanner이란 클래스가 선언된 .java 파일명은 Scanner일 것이다. 또한 next.Int 이렇게 매소드를 사용하는 것은 이 매소드 또한 public 으로 선언된 매소드 이기 때문이다. 

 

 

2. 내가 보려고 정리한 내용2

- 중첩 클래스가 아닌 클래스 선언

-> [접근 제한자] [final] class [클래스 이름]

 

- 중첩 클래스

-> [접근 제한자] [final] [static] class [클래스 이름]

 

- 한 클래스에는 필드, 생성자, 매소드가 존재하는데
필드는 필드선언시 초기화 되거나 메소드에서 초기화가 이루어져야 한다.

 

- 한 패키지에서 실행클래스가 여러개 존재할 수 있지만 관행적으로 한 프로젝트에 하나의 실행파일으 
가져야 한다. 

 

- 클래스 상속은 부모클래스의 필드와 매소드를 모두 그대로 자식 클래스에 선언되어 있다고
생각하면 됨!

단 부모 클래스에서 final키워드의 매소드,필드는 물려받지 않는다

 

- 기본 생성자의 접근 제한자는 그 클래스의 접근 제한자와 같음

 

 

3. 나름(?) 탐구1

public class A {
	B b=new B();
	static void func() {
		b.func1();
	}
}

위 코드는 옳은 코드일까???

 

클래스를 컴파일시 스태틱 맴버(스태틱 필드, 스태틱 매소드)들이 먼저 컴파일 된다.

static 함수 안에는 B의 객체가 만들어지지 않았으므로 b.func1(); 이 코드가 에러가 나고 
컴파일이 중지가 된다.