2024. 3. 13. 09:08ㆍ백엔드/자바
자바 - 코드의 구조

본격적으로 자바 문법을 공부하기에 앞서 자바 코드의 구조를 알아보기로 한다. 자바 문법 파트 역시 코딩에 관심이 많은 도깨비 까비와 함께 알아가보도록 하자.
/* 패키지 선언 */
package com.project.voyagelog;
/* 패키지 가져오기 */
import java.lang.*;
/* 클래스 블록 */
public class VoyageLogApplication {
/* 메인 메서드 블록 */
public static void main(String[] args) {
char exclamationMark = '!';
System.out.println("Hello Java" + exclamationMark);
}
/*메서드 블록 */
public static int add(int a, int b) {
return a + b;
}
}
까비: 음 이게 뭐지? 우리 마을에서 제일 이상하지만 똑똑한 꼬비한테 물어보러 가야겠다!
잠시 후...
까비: 꼬비야! 물어볼게 있어!
꼬비: 내 이름은 "루카스 벤자민 오일러 퀘이크"다. 무슨 일이 있어서 나를 찾아왔지?
까비: 내가 땅에서 이런 글씨가 적힌 종이를 찾았는데 뭔가 코딩이랑 관련 있어 보여서 너한테 물어보러 왔어.
꼬비: 후후후후 이 루카스 벤자민 오일러 퀘이크의 도움이 필요한 이가 나타났군... 이건 아주 기본적인 자바의 소스 코드 구조라고 볼 수 있지...
까비: 소스 코드가 뭔데?
꼬비: 바보같은 녀석! 소스 코드란 원시 코드라고도 할 수 있지.... 소스 코드는 컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 텍스트 파일을 말한다... 그리고 이건 자바로 짜여진 코드이지... 나의 임무는 바로 패키지, 클래스, 메서드, 명령문을 너에게 납득시키는 것이겠군...
패키지
- package 키워드란 자바 클래스 파일들을 모아 기능별로 분류하기 위한 일종의 디렉토리이다.
- 클래스를 등록하면 자동으로 첫 줄에 생성되며, 클래스를 식별하는 관리자 역할을 한다. 이외에도 클래스명이 충돌하지 않도록 카테고리와 한 것으로 보면 된다.
- 패키지 이름으로는 숫자와 특수문자(_와 $ 제외) 사용이 불가능하며, 모두 소문자로 작성해야 한다.
- 패키지의 점(.)은 [상위패키지].[하위패키지].[클래스] 를 의미한다.
- 예를 들어 패키지명 com.project.voyage 은 폴더 파일로 com\project\voyage와 같다.

까비: 그럼 패키지는 일종의 주소 같은 걸로 볼 수 있겠네?
꼬비: 그런 셈이지. 만약 까비라는 이름의 도깨비가 두 명이 있어 이름만 봤을 때는 누가 누군지 알 수 없겠지? 하지만 도깨비 마을의 까비와 자바 마을의 까비라고 하면 두 명의 서로 다른 까비를 우리는 "구분"할 수 있게 돼. 기본적인 package의 용도는 서로 다른 파일을 경로를 통해 구분하게 해주지. 게다가 package의 장점은 이 뿐만이 아니지...
패키지 가져오기
- 다른 패키지의 자바 표준 API나 클래스 파일을 가져올 때 사용한다. (소스 코드 간략화가 목적)
- 코드에서 사용할 클래스의 패키지 정보를 미리 제공하는 역할
- 패키지 이름을에는 패키지의 경로를 포함한 풀 네임을 명시
- import 문을 선언할 때 별표(*)를 사용하면 해당 패키지에 포함된 모든 클래스를 사용 가능
꼬비: 바로 다른 package를 빌려올 수 있다는 점이지! 현재 나의 패키지의 클래스뿐 만아니라 다른 package의 클래스도 쓸 수 있어! 후후후 다른 패키지의 힘을 빌려올 수 있다니... 이거이거 너무 강해지는 거 아니야! 하지만 이런 빌려올 수 있다는 점이 문제를 발생시키는 경우도 있지... 그건 차차 알게 될 거야... 흐흐흐
까비: 그렇구나.
꼬비: 제대로 들은 거 맞아...? 다만 import를 할 땐 주의할 점이 있지...
import 주의할 점
import 문을 선언할 때 별표(*)를 사용하면 해당 패키지에 포함된 모든 클래스를 가져오지만, 모든 하위 패키지의 클래스까지 포함시켜주지 않는다. 따라서 하위 클래스까지 가지고 오소 싶다면 직접 하위 도메인 경로를 지정해 표현해야 한다.
import java.*;
// 하위 패키지 전체 불러오기
import java.awt.*;
import java.util.*;
까비: 다음으로 알아볼 것은 클래스 블록이네? 클래스 블록은 뭘하는 거야?
꼬비: 헉 클래스를 모르다니 클래스를 모른다는 것은 자바를 모른다는 것과 같지.
까비: 그렇게 클래스가 중요한거야...?
꼬비: 당연하지! 클래스는 자바 프로그래밍의 기본적인 요소라고 볼 수 있어. 그렇기 때문에 이 클래스에 대해선 나중에 자세히 설명해주도록 하지... 이번 시간은 자바 소스 코드의 대략적인 구조를 알아보는 시간이니만큼 간단하게만 알려주겠어...
클래스 블록
- 클래스란 자바에서 객체를 생성하기 위한 설계도이다.(ex. 붕어빵을 만들 때 붕어빵 틀)
- 클래스명은 반드시 소스 파일명과 일치해야 한다.(파일명: voyageLog -> 클래스명: public class voyageLog {}와 같이 일치 해야함)
- public 접근지정자가 지정된 클래스는 반드시 클래스 파일 내, 하나의 클래스만 존재할 수 있다.
- 클래스 구성은 필드, 생성자, 메서드, 내부 클래스가 있다.
- 필드(field): 속성이라고도 한다. 객체의 데이터를 저장한다.
- 생성자(constructor): 생성된 객체를 초기화한다.
- 메서드(method): 객체의 동작을 실행한다.
- 내부 클래스(inner class): 클래스나 인터페이스 내부의 선언
public class voyageLog {
public int fieldName; //필드
public voyageLog() { ... } //생성자
public void methodName() { ... } //메서드
class Member { ... } //내부 클래스
}
꼬비: 뭐 일단은 이 정도만 알면 되겠군...
까비: 클래스는 붕어빵을 찍어내는 붕어빵 틀과도 같은 건데 필드, 생성자, 메서드, 내부 클래스를 가진다는 거지?
꼬비: 바로 그거야...
메인 메서드 블록
- main 메서드는 프로그램을 구동하는 메인 스레드이다.
- 자바 프로그램을 실행하면 자바 가상 머신은 클래스 내에 포함되어 있는 public static void main(String[] args)라는 시그니처를 갖는 메인 함수를 실행한다.
/* 메인 메서드 블록 */
public static void main(String[] args) {
//...
}
메인 메서드의 구성은 다음과 같다.
- 1. public: public은 접근제어자이다. 접근 제어자는 외부에서 접근할 수 있는 일종의 제약인데 public은 어느곳에서든 해당 객체를 참조할 수 있다는 의미이다. main 함수에 public이 아닌 private나 protected를 사용하면 에러가 발생한다. main 함수는 모든 실행 프로그램의 기본이 되는 함수이기 때문에 어디에서나 접근이 가능해야 한다.
- 2.static: 자바가 compile되는 순간 가장 빠르게 정의되어 별도의 객체 생성 없이 모든 객체와 공유가 가능하다. 변수와 메서드를 메모리에 할당할 때, 저장되는 영역에는 두 가지가 있다. 바로 static과 heap이다. 프로그램을 시작하는 함수가 Garbage Collector에 의해 정리되면 안되니 static 영역에 메모리를 할당한다.
| static | heap |
| 프로그램이 실행될 때 저장됨 | 메소드(연산)이 실행될 때 저장됨 |
| Garbage Collector가 정리하지 않음 | Garbage Collector가 정리함 |
- 3. void: 메인이 죽으면 다음 단계 없이 프로그램 전체가 종료된다. 따라서 return 값을 갖지 않는 void로 설정한다.
- 4. main: 컴파일할 때 프로그램은 자동으로 main 메서드를 찾아 진입점으로 인식한다. 따라서 main 메서드가 없으면 에러가 발생한다. 만약 main 메서드 없이 프로그램을 작성하고 싶다면 컴파일할 때 옵션에 /reference를 사용하여 라이브러리 형태라는 것을 명시해주어야 에러가 발생하지 않는다.
- 5. string[] args: 연속적인 문자열 데이터가 들어가는 저장 공간. 터미널에서 자바 프로그램을 실행할 때 인수를 줄 수 있는데 이 값이 이곳으로 들어오게 된다.
명령문(Statement)
- 메서드 블록 안에는 명령문이 있다. 컴퓨터에 무언가 일을 시키는 문장을 명령문(statement)이라고 한다.
public class Sample {
public static void main(String[] args) {
System.out.println("Hello java");
}
}
명령문은 반드시 세미콜론(;)을 붙여 문장이 끝났다는 것을 표시해야 한다. 메서드 블록 안에는 명령문이 여러개 있을 수 있다.

까비: 이 정도는 할만한 것 같은데?
꼬비: 당연하지! 아직 시작도 안했으니까! 이제부터 진짜 자바 문법에 대해 알려줄테니 기대하라구 흐흐흐...
까비: 고마워 꼬비야!
꼬비: 난 "루카스 벤자민 오일러 퀘이크"야!
참고
☕ JAVA 소스 코드 구조 - 한눈에 이해하기
자바 소스코드의 구조 본격적으로 자바(Java) 문법에 대해 배우기 전에, 전반적인 자바 소스 코드가 어떤식으로 구성이 되어있는지에 대해서 알아보자. 보통 일반적인 자바 소스코드는 다음과 같
inpa.tistory.com
02-01 자바 코드의 구조 살펴보기
[TOC] 자바 코드의 구조를 알아보자. 일반적으로 자바 코드는 다음과 같은 형태로 작성한다. ```{.java} /* 클래스 블록 */ public class 클래스명 { …
wikidocs.net
[JAVA] 자바 public static void main (String args) 뜻은?
자바가 실행되는 기초 코드 public static void main(String[] args) 무슨 뜻일까?! Public은? 접근 제한자인데, 이 접근 제한자에는 public, protected, private, default가 있음! java 접근 제한자 public protected private defau
blog.thelumayi.com
'백엔드 > 자바' 카테고리의 다른 글
| 자바 - 클래스(인스턴스, 필드, 메서드, 생성자) (0) | 2024.03.19 |
|---|---|
| 자바 - 객체 지향 프로그래밍의 4가지 특징(추상화, 상속, 다형성, 캡슐화) (0) | 2024.03.15 |
| 자바 - 래퍼 클래스(Wrapper Class) (0) | 2024.03.14 |
| 자바 - 자바 변수의 자료형(Data Type) (0) | 2024.03.13 |
| 자바 - JVM(자바의 동작 과정) (0) | 2024.03.11 |