1.자바(Java) 언어의 기본 구조
| 종류 | 사용법 | 단축키 (Eclipse 기준) | 설명 |
|---|
| 한 줄 주석 | // 주석내용 | Ctrl + / | 한 줄 전체를 주석 처리 |
| 여러 줄 주석 | /* 주석내용 */ | Ctrl + Shift + /Ctrl + Shift + \ | 여러 줄을 블록으로 주석 처리 |
| 문서 생성 주석 | /** 주석내용 */ | Shift + Alt + J | API 문서(클래스/메서드 설명)용 주석 |


1.2 자바의 메서드
- 자바는 함수(Function) 대신 메서드(Method)를 사용합니다.
- 메서드란?
- 항상 클래스 내부에 존재합니다.
- 예시:
public static void main(String[] args) { ... }
public, static, void, main 등은 메서드의 접근제어자, 정적 선언, 반환형, 이름을 의미합니다.
1.3 세미콜론, 블록, 공백
세미콜론(;)
- 논리적으로 한 문장이 끝날 때 반드시 붙입니다.
- 한 줄에 여러 문장을 작성할 경우 각 문장 끝에 세미콜론을 붙입니다.
javaint a = 10; int b = 20; int c = 30;
블록({ })
- 중괄호
{ }로 묶인 부분을 블록이라고 하며, 여러 문장을 하나로 묶을 때 사용합니다.
- 클래스와 메서드는 반드시 블록으로 감쌉니다.
공백(Whitespace)
- 빈칸, 탭, 빈 줄 등은 코드의 가독성을 높여줍니다.
- 들여쓰기는
Ctrl + i로 자동 정렬할 수 있습니다.
- 특정 블록: 블록 선택 후
Ctrl + i
- 전체 파일:
Ctrl + a로 전체 선택 후 Ctrl + i
1.4. 식별자(Identifier)
- 대소문자를 구분하며, 길이 제한이 없습니다.
- 문자, 숫자, 밑줄(_), 달러($)를 포함할 수 있습니다.
- 시작 규칙
- 문자, 밑줄(_), 달러($)로 시작 가능 (숫자로 시작 불가)
- 첫 문자 이후에는 문자, 숫자, 밑줄(_), 달러($) 모두 사용 가능
- 공백은 포함할 수 없음
- 한글도 사용 가능하지만, 가급적 영문자를 사용하는 것이 좋습니다.
- 밑줄(_), 달러($)는 특별한 경우를 제외하고 사용을 지양합니다.
1.5. 예약어(Keyword)
- 자바에서 미리 정의된 단어로, 변수명이나 식별자로 사용할 수 없습니다.
- 예시:
class, public, static, void, if, else, for 등
2장 변수와 메서드
2.1 클래스이름/ 인터페이스 이름
- 명사나 형용사를 서술적으로 연결하여 사용
- Public의 경우 파일명과 클래스이름과 동일해야한다.
- 만약 변경해야한다면 refactor rename을 쓴다

2.2 변수이름
- 명사적 의미를 갖게 만듬
- 첫글자는 소문자, 연결단어의 첫글자는 대문자로 표기함
- ‘_’(언더바)를 사용하지 않는다
2.3 메서드 이름
- 동사적 의미를 갖게 만듬
- 첫글자는 소문자, 연결다너의 첫글자는 대문자로 표기함
- ‘_’(언더바)를 사용하지 않는다
- 뒤에 () 소괄호가 나온다
2.4 클래스 규칙
2.4.1 자바 파일에서 클래스 선언 관련 기본 규칙
- 하나의
.java 파일에 여러 클래스 선언은 가능
- 퍼블릭 클래스는 딱 하나만 존재 가능
- 퍼블릭 클래스의 이름은 반드시 파일 이름과 같아야 함
public class MyClass {
}
class Helper {
}
2.4.2 왜 퍼블릭 클래스는 하나만, 파일명과 같아야 하나?
- 컴파일러가 클래스와 파일을 연결하기 쉽게 하기 위해 퍼블릭 클래스는 외부에서 접근 가능한 대표 클래스이므로, 파일명과 일치시키면 찾기 쉬움.
- JVM은 클래스 로딩 시 파일명을 기준으로 클래스를 찾는데, 퍼블릭 클래스가 파일명과 다르면 혼란이나 충돌이 생길 수 있음.
- 명확한 매핑을 통해 큰 프로젝트에서도 일관된 구조를 유지할 수 있음.
2.4.3 퍼블릭 클래스 외의 클래스는?
public이 아닌 클래스 (default, private, protected)는 같은 파일 안에 여러 개 선언 가능
- 단,
private 클래스는 최상위(Top-level)로 선언 불가능 → 자바는 Top-level 클래스는 public 또는 default (package-private)만 가능
private class HiddenClass { }
class DefaultClass { }
2.4.4 내부 클래스 (Inner class)에서는 private, protected 등 사용 가능
public class Outer {
private class InnerPrivate { }
protected class InnerProtected { }
class InnerDefault { }
public class InnerPublic { }
}
→ 위의 경우는 클래스 안에 정의된 "내부 클래스"이므로 접근 제한자 사용이 가능함.
3장 변수와 메서드
3.1 변수
- 자바는 정적 타입 언어이기 때문에, 변수를 선언할 때 반드시 자료형(type)을 명시해야 합니다.
- 변수를 사용하는 이유는 계산된(변하는) 값을 저장하고 재활용하기 위함입니다.
public class VariableExample {
public static void main(String[] args) {
int numberOne = 10;
int numberTwo = 20;
int result = numberOne + numberTwo;
System.out.println(result);
}
}
3.2 자바 클래스 구조와 멤버 변수
- 자바 클래스는 일반적으로 멤버 변수, 생성자, 메서드로 구성됩니다.
- 클래스 안에 선언된 변수는 멤버 변수 (Member Variable)라고 하며, 클래스 전체에서 사용할 수 있습니다.
- 반면, 메서드 내부에서 선언된 변수는 지역 변수 (Local Variable)라고 합니다.
public class HelloWorld {
int count;
public HelloWorld() {
}
public void sayHello() {
}
}
3.3 지역 변수 (Local Variable)
- 메서드나 블록 내에서 선언된 변수는 지역 변수입니다.
- 지역 변수는 명시적으로 초기화하지 않으면 사용할 수 없습니다.
public class LocalVariableExample {
public static void main(String[] args) {
int a;
System.out.println(a);
}
}
- 위 예제에서는 변수
a를 초기화하지 않았기 때문에 컴파일 에러가 발생합니다.
- 지역 변수는 반드시 초기화 후 사용해야 합니다.
3.4 멤버 변수 (Member Variable)
- 클래스 내부, 메서드 외부에 선언된 변수는 멤버 변수입니다.
- 자동 초기화: 사용자가 초기화하지 않아도 자바 시스템이 기본값으로 초기화합니다.
- 예:
int → 0, boolean → false, Object → null
- 멤버 변수는 다음과 같이 두 가지로 구분됩니다:
| 구분 | 설명 | 사용 방법 |
|---|
| 인스턴스 변수 | static 키워드 없이 선언 | 객체 생성 후 참조변수.변수명 으로 접근 |
| 클래스 변수 (정적 변수) | static 키워드로 선언 | 클래스 이름으로 직접 접근 가능 |
⚠ static 블록 주의
static 메서드나 블록에서는 비-static 멤버(인스턴스 변수)를 직접 사용할 수 없습니다.
- 이유:
static은 클래스 단위에 속하고, 인스턴스는 객체가 생성된 이후에 존재하기 때문입니다.
public class MemberVariableExample {
int a;
static int b;
public static void main(String[] args) {
System.out.println(b);
}
}
3.5 요약
| 항목 | 설명 |
|---|
| 지역 변수 (Local Variable) | 메서드 내부에서 선언됨. 초기화 없이 사용 불가 |
| 멤버 변수 (Member Variable) | 클래스 내부에 선언됨. 자동 초기화됨 |
| 인스턴스 변수 | static 없이 선언된 멤버 변수. 객체 생성 후 사용 |
| 클래스 변수 | static으로 선언된 멤버 변수. 클래스명으로 직접 접근 가능 |
| static 메서드 | 인스턴스 변수 직접 접근 불가 (객체를 통해 접근해야 함) |
3.6 메서드 (Method)
- 자바에서는 모든 함수는 반드시 클래스 내부에 정의되어야 하므로, 일반적으로 ‘함수’보다는 ‘메서드’라고 부릅니다.
- 메서드는 특정 작업을 수행하는 코드 블록으로, 반환형(return type)과 매개변수(parameter list)를 포함합니다.
📌 메서드 기본 문법
return_type methodName(parameter_list) {
return 반환값;
}
📌 예시
public class MethodExample {
static int add(int num1, int num2) {
return num1 + num2;
}
public static void main(String[] args) {
int result = add(100, 200);
System.out.println(result);
}
}
add(int num1, int num2)는 정수 두 개를 받아 합산한 결과를 반환하는 메서드입니다.
return을 통해 결과를 돌려줍니다.
parameter_list는 메서드 호출 시 외부로부터 전달받는 값입니다.
3.7 자료형 (Data Types)
자바의 자료형은 기본 자료형(primitive type)과 참조 자료형(reference type)으로 구분됩니다.
✅ 기본 자료형 (Primitive Types)
| 분류 | 자료형 | 크기 | 범위 또는 값 |
|---|
| 정수형 | byte | 1 byte | -128 ~ 127 |
| short | 2 byte | -32,768 ~ 32,767 |
| int | 4 byte | -2,147,483,648 ~ 2,147,483,647 |
| long | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| 실수형 | float | 4 byte | ±1.4e-45 ~ ±3.4e+38 (약 7자리 정밀도) |
| double | 8 byte | ±4.9e-324 ~ ±1.8e+308 (약 15자리 정밀도) |
| 논리형 | boolean | 1 byte | true, false |
| 문자형 | char | 2 byte | 유니코드 문자 (\u0000 ~ \uFFFF) |
✅ 참조 자료형 (Reference Types)
- 객체나 배열을 참조할 때 사용되며, 기본형이 아닌 모든 타입이 참조형입니다.
- 대표 예:
String, Scanner, ArrayList, 사용자 정의 클래스 등
String name = "Java";
String은 문자들의 집합을 나타내는 참조형이며, 내부적으로는 char 배열을 사용합니다.
3.7.1 정수형 (Integral Types)
- 자바에서 정수는
int, long 등으로 표현하며, 10진수뿐만 아니라 2진수, 8진수, 16진수로도 표현 가능합니다.
- 숫자 리터럴 내에서
underscore(_)를 사용하여 가독성을 높일 수 있습니다.진수 표현법
| 진수 | 접두어 | 예시 | 설명 |
|---|
| 10진수 (Decimal) | 없음 | int decimalValue = 7; | 일반적인 숫자 |
| 2진수 (Binary) | 0b 또는 0B | int binValue = 0b1000_0101; | 자바 7부터 지원 |
| 8진수 (Octal) | 0 | int octalValue = 077; | 앞에 0을 붙임 |
| 16진수 (Hexadecimal) | 0x 또는 0X | int hexaValue = 0xFEFE; | 앞에 0x를 붙임 |
📌 예제: IntValueExample.java
public class IntValueExample {
public static void main(String[] args) {
int decimalValue = 7;
int binValue = 0b1000_0101;
int octalValue = 077;
int hexaValue = 0xFEFE;
System.out.println("10진수 7은: " + decimalValue);
System.out.println("2진수 10000101은: " + binValue);
System.out.println("8진수 77은: " + octalValue);
System.out.println("16진수 FEFE는: " + hexaValue);
}
}
3.7.2 실수형 (Floating Point Types)
- 실수형은 소수점이 있는 숫자를 표현합니다.
- 자바에서는
float과 double 두 가지 실수형이 있습니다.
- 실수는 부동소수점(Floating Point) 방식으로 표현되며, 정수보다 부정확할 수 있으므로 주의가 필요합니다.
실수형 리터럴 작성법
| 타입 | 크기 | 접미사 | 예시 |
|---|
float | 4 byte | F 또는 f (필수) | float num1 = 1.1F; |
double | 8 byte | D 또는 d (선택) | double num2 = 1.1; 또는 1.1D |
📌 예제: FloatTypeExample.java
public class FloatTypeExample {
public static void main(String[] args) {
float num1 = 1.1F;
double num2 = 1.1;
System.out.println(num1);
System.out.println(num2);
}
}
3.8 논리형: boolean
boolean은 참(true) 또는 거짓(false) 두 값만 가질 수 있음.
- 숫자 0, 1이나 문자열
"true", "false"를 직접 boolean에 대입할 수 없음.
boolean b1 = true;
boolean b2 = False;
boolean b3 = "false";
boolean b4 = 0;
❗ Python과 다르게 숫자 0, 1 → boolean 처리 불가
3.9 문자형과 문자열
3.9.1 문자: char
- 문자 하나를 저장하며, 작은 따옴표('') 사용
- 내부적으로는 유니코드 정수형 (16비트)
char c1 = 'A';
char c2 = '\uAC00';
3.9.2 문자열: String
- 문자열은 기본 타입이 아닌 클래스
- 큰 따옴표("") 사용
String s1 = "Hello";
String s2 = "\uD604\uC218";
🪄 특수문자 (Escape 문자)
System.out.println("줄\n바꿈");
3.10 형변환 (Type Casting)
3.10.1 암시적 형변환 (자동)
- 작은 타입 → 큰 타입 으로 자동 변환됨
- 데이터 손실 없음
int i = 42;
double d = i;
3.10.2 명시적 형변환 (강제)
- 큰 타입 → 작은 타입 변환 시 명시적 캐스팅 필요
- 데이터 손실 가능
double d = 42.5;
int i = (int) d;
3.10.3 형변환 연산자
byte a = 100;
int b = a;
byte c = (byte) b;
3.10.4 형변환 규칙
- 실수 > 정수 > 문자 순으로 크기 비교
char ↔ int: 자동 변환 가능
char ↔ short: 자동 변환 불가 (충돌 위험)
char ch = 'A';
int num = ch;
short s = 100;
📌 정수 → 실수 형변환 예시 (정밀도 손실 주의)
int a = 1234567890;
float b = a;
System.out.println(b);
3.10.5 산술 연산 시 자동 형변환
- 작은 타입들끼리 연산하면 결과는 int
- 컴파일러는 리터럴 연산은 예외로 처리하기도 함
byte a = 10, b = 20;
byte c = (byte)(a + b);
byte d = 10 + 20;
short e = 100 + 200;
System.out.println(5 / 2);
System.out.println(5 / 2.0);
3.10.6 반올림, 올림, 내림
| 메서드 | 설명 |
|---|
Math.round() | 반올림 (소수 첫째 자리 반올림) |
Math.ceil() | 올림 (소수점 올림) |
Math.floor() | 내림 (소수점 내림) |
double a = -3.6, b = -3.4, c = 3.4, d = 3.6;
System.out.printf("%.0f %.0f %.0f %.0f\n",
Math.ceil(a), Math.ceil(b), Math.ceil(c), Math.ceil(d));
System.out.printf("%.0f %.0f %.0f %.0f\n",
Math.floor(a), Math.floor(b), Math.floor(c), Math.floor(d));
System.out.printf("%d %d %d %d\n",
Math.round(a), Math.round(b), Math.round(c), Math.round(d));
3.10.7 문자열 + 연산자
public class StringPlusExample {
public static void main(String[] args){
String s1 = "hello";
String s2 = "World";
System.out.println(s1 + s2);
int a1 = 3, a2=5;
System.out.println(s1+ a1+ a2);
System.out.println(ai+ a2+ s1);
System.out.println(s1+ (a1+a2));
}
}