| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- goorm
- Spring Boot
- 자바
- java
- MSA
- aws
- jvm
- backenddeveloper
- mapping
- QueryDSL
- serverless
- Docker
- nosql
- data
- backend
- 티스토리챌린지
- Redis
- jpa
- s3
- 스터디
- goorm x kakao
- Cache
- CodeCommit
- 개발자
- 자격증
- 오블완
- bootcamp
- orm
- spring
- 기본형
- Today
- Total
gony-dev 님의 블로그
자바 소스 코드 구조 본문
자바 문법을 이해하기 전에 자바 소스 코드가 어떻게 구성되어 있는지 알아보자.
(자바 소스 코드는 JVM 컴파일러를 통해 바이트 코드로 컴파일링 되기 전의 상태이다.)

0. 시작하기 전에..
자바로 프로그래밍을 하기 위해서는 JDK라는 개발 도구가 필요하다.
OS에 JDK를 설치하면 JVM과 JRE 등 자바 개발에 필요한 프로그램들이 설치된다.
이해가 되지 않는다면 아래의 글을 참고해보자.
2025.11.24 - [JVM] - JDK / JRE / JVM 개념
JDK / JRE / JVM 개념
Java 언어를 사용하여 프로젝트를 사용하는 것은 우리에게 기본적인 행위이지만어떤 식으로 돌아가는지 아는 이들은 과연 얼마나 될까?Java 프로그램이 돌아가게 하는 JDK와 JRE, 그리고 이 둘을 합
gony-dev.tistory.com
1. 자바 소스 파일 구조
자바에서 모든 소스 코드는 class 안에 작성하도록 명시되어 있다.
그리고, 자바 프로그램은 많은 class의 집합으로 이루어져 있다.
보통 일반적인 자바 소스 코드는 다음과 같은 형태로 구성되어 있다.
// 1. 패키지 선언
package com.hello.helloworld
// 2. import 선언
import java.lang.*;
// 3. Class 선언
public class MyClass {
// 4. main 메서드 선언
public static void main(String[] args) {
String str = hello("Hello World!");
System.out.println(str);
}
// 5. hello 메서드 선언
public static String hello(String msg) {
return msg + " My name is Park!";
}
}
1-1. 패키지(package) 선언
패키지는 클래스가 위치한 경로를 의미하며, 하나의 패키지 안에는 여러 패키지가 존재할 수도 있고, 여러 클래스가 존재할 수 있다.
패키지 명명 규칙에 대해서는 다음과 같다. 하지만 암묵적으로 규칙이 되어 있을 뿐, 무조건적으로 따를 강제적 제약은 아니다.
- 패키지는 자바 소스 파일의 최상단에 선언해야하며, 두 번 이상 허용되지 않는다.
- 패키지명은 영어 대소문자를 모두 사용(=camel case)할 수 있으나, 대부분 영어 소문자만으로 구성하는 것을 권장한다.
- 동일한 이름의 클래스가 여러 존재하는 경우, 패키지를 기준으로 클래스를 구분할 수 있다.
- 패키지는 OS 내의 폴더와 같이 물리적인 경로를 의미하며, 패키지 선언에 포함되는 '.'은 OS에서 폴더를 구분하는 '\'와 동일하다.
이러한 규칙으로 서로 연관된 클래스들을 패키지 단위로 묶으면, 프로젝트 내 클래스들을 효율적으로 관리할 수 있다.
1-2. import 선언
'import'는 특정 클래스에서 다른 클래스를 참조하고 싶을 때 선언하는 키워드이다.
즉 코드에서 사용할 클래스 패키지에 대한 정보를 미리 제공하는 역할을 하며, 참조할 패키지에 대해서는 경로를 포함한 풀 네임을 명시해야한다.
만일 자바에서 import를 사용할 수 없다면(그럴 일은 없겠지만..),
아래 코드처럼 String 클래스와 같이 클래스의 전체 경로를 선언하면 된다.
package com.hello.helloworld;
public class Hello {
public static void main(String args[]){
java.lang.String str = hello("Hello World!");
}
public static java.lang.String hello(String msg){
return msg + " My name is Park!";
}
}
위는 예시 코드로서 보여준 것이지만, java.lang 패키지에 대해서는 import문을 사용하지 않아도 클래스 이름만으로 사용할 수 있도록 하고 있다.
import를 선언할 때에는 주의할 점이 있는데, 선언 시 '*'를 사용하면 해당 패키지에 포함된 모든 클래스를 가져오지만 모든 하위 패키지의 클래스까지 포함시켜주지 않는다.
따라서 하위 클래스까지 가져오고 싶다면 직접 하위 도메인 경로를 지정해 표현하는 것이 좋다.
1-3. 클래스 선언
클래스는 객체를 정의해 둔 설계도로 정의할 수 있다.
클래스 명은 반드시 소스 파일명과 일치해야하며, 접근제어자에 따라 동일한 클래스명을 가질 수도 있다.
위의 MyClass 클래스명은 public으로 지정하여 다른 패키지 내에서 사용할 수 있기 때문에 중복 문제가 발생하지 않도록 하나만 존재해야한다.
클래스 구성은 아래의 4가지로 구성되어 있다.
- 필드 | 객체의 데이터를 저장
- 생성자 | 생성된 객체를 초기화
- 메서드 | 객체의 동작을 실행
- 내부 클래스 | 클래스나 인터페이스의 내부에 선언
1-4. main 메서드 선언
main 메서드는 프로그램을 실행하는 메인 스레드 역할을 하며 구성된 바는 아래와 같다.
public static void main(String[] args) {
// psvm이라는 단축어로 메서드 자동 생성이 가능하다!
}
- public | 모든 클래스에서 사용 가능한 의미의 접근 제어자
- static | 컴파일 시 가장 빠르게 정의되어 별도의 객체 생성 없이 모든 객체와 공유가 가능
- void | 반환값이 존재하지 않는 메서드
- main | 메서드명
- String[] args | 연속적인 문자열 데이터가 들어가는 저장 공간
참고
1. Inpa dev
2. Congsong
'JAVA' 카테고리의 다른 글
| JAVA의 꽃, 객체 지향 프로그래밍(OOP)의 클래스 문법 (1) | 2026.01.12 |
|---|---|
| JAVA 배열을 모르겠다고? 알려드리겠습니다! (0) | 2026.01.06 |
| JAVA 타입 형변환 (1) | 2026.01.04 |
| JAVA 기본형 데이터 타입 (0) | 2025.12.31 |
| JAVA 변수 종류 (0) | 2025.12.30 |