Java Study #1

allzeroyou·2022년 1월 24일
0

Java

목록 보기
1/14
post-thumbnail

1. 자바 프로젝트 생성 및 실행

① 자바프로젝트 생성 -> 프로젝트 폴더 생성
( mac 단축키 : option + command + N )
② 패키지 생성 -> 하위 폴더 생성
③ 자바 소스 파일 생성 -> 소스파일 생성(.java)
④ 컴파일 및 바이트 코드 생성 -> 바이트 코드 생성(.class)
⑤ 실행

2. 자바 소스 코드의 기본 구조 분석

Do it! 실습 | 생성 프로젝트의 기본구조

package sec01_basicsyntax.EX01_JavaBasicStructure;

/* Control + Command + '/'
처음 만든 클래스!
(여러 줄 주석!)
*/

public class JavaBasicStructure {
	public static void main(String[] args) {
		// 1줄 주석: 화면 출력 코드  Command + '/'
		System.out.println("콘솔 화면에 출력합니다.");
	}
}

패키지 선언부

패키지를 지정하면 주석을 제외한 첫 줄에 반드시 패키지의 선언을 해야한다.
위 실습 코드처럼 첫 줄에 package 패키지이름 이 정의돼 있다면, 소스 파일이 패키지이름 속에 위치하고 있음을 뜻한다.
만약 패키지를 지정하지 않았을 때, 디폴트 패키지를 사용할때는 패키지 선언이 생략된다.

클래스 선언부

public class Test {
         ↓     ↘︎
    클래스 임을  클래스 명
    알려주는
    자바 키워드
}

public 은 이번 코드에서 사용한 클래스를 다른 패키지에서도 사용할 수 있다는 의미를 지닌 접근 지정자이다.
1개의 소스 파일에는 여러개의 클래스가 존재할 수 있는데, 몇 개의 클래스가 존재하든 최대 1개의 클래스만 public을 포함할 수 있다는 것이 중요하다.

main() 메서드

메서드의 구조는 리턴 타입 메서드 이름(...){ } 이다.
아래 소스 코드를 보며 메서드의 구조를 익히자.

public static void main(String[] ar){
               ↓     ↘︎
            리턴 타입  메소드 명
            
}

메서드 구조 앞에 위치한 public은 접근 지정자, static은 정적 메서드를 나타내는 자바 키워드이다.
여기서 public static쓴 커피처럼 메서드를 꾸며 주는 수식어 정도로 이해하면 적절하다.
즉, public static한 메서드 라고 생각하자!
바이트 코드인 .class 파일이 메서드 영역에 로딩되면 자바 가상 머신(JVM)은 main() 메서드 부터 찾아서 실행 이후 가장 먼저 실행시킨다!

3. 소스 파일 컴파일과 바이트 코드 생성

1개의 소스 파일에는 여러 개의 클래스 파일이 포함될 수 있고, 소스 파일명은 반드시 클래스 이름과 같아야 한다고 했다.

Q1. 하나의 자바 소스 파일에 클래스가 여러 개면 어떤 클래스와 이름을 일치시켜야 할까?

정답은 public이 붙은 클래스이다!
이것이 바로 소스 파일에 1개의 public클래스만 존재해야 하는 이유이다.

Q2. 소스 파일을 컴파일하면 바이트 코드(.class)는 몇 개 생길까?
소스 파일(.java)당 1개 일까?
아님 정의된 클래스(class)당 바이트 코드(.class)가 1개 일까?

힌트는 바이트 코드(.class)의 확장명에서 얻을 수 있다.
자바의 바이트 코드(.class)는 클래스당 하나씩 생성된다.

만약 하나의 소스 파일에 100개의 클래스가 정의되어 있다면, 바이트 코드(.class)100개가 생기는 것이다!

Do it! 실습 | 컴파일 후 생성되는 바이트 코드(.class)

package sec01_basicsyntax.EX02_ByteCodeFiles;

class A { // A.class
	
}
class B{ // B.class
	
}
class C{ // C.class
	class D{ //C$D.class
		
	}
}



public class ByteCodeFiles { // ByteCodeFiles.class
	public static void main(String[] args) {
	}
} 

먼저 1개의 파일에 4개의 클래스가 정의돼 있다. 쉽게 말해 class라는 키워드가 4개 있다는 것이다.
publicclass ByteCodeFiles 앞에 선언돼 있으므로 소스 파일명은 ByteCodeFiles 라고 추측할 수 있다.
그렇다면, 생성되는 바이트 코드명은 어떻게 될까?
외부에 있는 클래스클래스 명.class 와 같이 생성된다.

  • class A{} -> A.class
  • class B{} -> B.class
  • class C{} -> C.class
    처럼 말이다.

반면, 클래스 내부에 있는 클래스는 반드시 자신을 감싸고 있는 바깥 클래스 부터 먼저 표현해야 한다.
위 코드에서 class C{} 안에 있는 class D{} 는 단독으로 D.class 라는 바이트 코드명은 안되고, C$D.class 라는 바이트 코드명이 생성된다.

profile
모든 건 zero 부터, 차근차근 헛둘헛둘

0개의 댓글