CHAPTER 06. 클래스에 대하여
1. 객체지향 언어란?
- What:
프로그램을 “객체”로 구성해서 데이터를 중심으로 동작하게 만드는 언어.
- Why:
코드 재사용, 유지보수 편리, 현실 세계 모델링이 쉬움(그래봤자 네가 모델링할 현실은 없음).
- How:
클래스를 만들고, 객체(인스턴스)로 만들어 사용함.
2. 클래스와 객체
(1) 클래스란?
- What:
객체를 만들기 위한 설계도(틀, blueprint).
- Why:
같은 구조/동작을 가진 객체를 찍어내려면 필요함.
- How:
class 클래스명 { 변수; 메서드; } 형태로 선언.
class Dog {
String name;
void bark() {
System.out.println("멍멍");
}
}
(2) 인스턴스란?
- What:
클래스로부터 실제로 만들어진 “실체(객체)”.
- Why:
설계도로는 아무 짓도 못하니까, 실제로 사용하려면 인스턴스를 만들어야 함.
- How:
Dog d = new Dog();
(3) 객체의 생성과 사용
- What:
클래스를 기반으로 메모리에 공간을 할당해서 객체 생성.
- Why:
메서드, 변수 등 사용하려면 생성해야 함.
- How:
Dog d = new Dog(); d.bark();
3. 인스턴스 변수와 클래스 변수
(1) 인스턴스 변수
- What:
객체(인스턴스)마다 각각 존재하는 변수.
- Why:
각 객체가 고유의 값을 가질 수 있음.
- How:
그냥 클래스 안에 선언.
(2) 클래스 변수 (static 변수)
- What:
모든 객체가 “공유”하는 변수. static 키워드로 선언.
- Why:
값이 전체에 공통이어야 할 때(예: 전체 객체 수).
- How:
static int count = 0;
class Dog {
static int count = 0;
Dog() { count++; }
}
4. 메서드
(1) 메서드란?
- What:
어떤 동작(함수)을 클래스 안에 정의한 것.
- Why:
반복되는 코드, 특정 동작을 쉽게 실행하기 위해.
- How:
void bark() { ... }
(2) 메서드의 사용
- What:
메서드를 호출해서 객체가 동작함.
- How:
d.bark();
(3) 메서드 사용 예
class Dog {
void bark() { System.out.println("멍멍"); }
}
Dog d = new Dog();
d.bark(); // 멍멍
(4) 생성자와 인스턴스 멤버간의 참조 및 호출
- What:
생성자 안에서 인스턴스 변수나 메서드 사용 가능.
- How:
그냥 this. 붙여서 사용하면 됨.
5. 생성자(Constructor)
(1) 기본 생성자
- What:
매개변수 없는 생성자.
- How:
Dog() { }
(2) 매개변수를 갖는 생성자
class Dog {
String name;
Dog(String n) { name = n; }
}
Dog d = new Dog("코코");
CHAPTER 07. 상속과 다형성
1. 상속이란?
- What:
기존 클래스(부모)의 특성을 “자식” 클래스가 물려받는 것.
- Why:
코드 재사용, 계층 구조 표현 가능.
- How:
class Child extends Parent { }
2. 오버라이딩 (Overriding)
- What:
부모 메서드를 자식이 “재정의”함(같은 이름, 같은 매개변수).
- Why:
자식 클래스의 특성에 맞게 동작을 바꾸고 싶을 때.
- How:
@Override 붙이고, 메서드 재정의.
3. 생성자 상속, super, Object 클래스
- super:
부모 생성자나 메서드에 접근.
- Object 클래스:
모든 클래스의 최상위 부모. 자바에선 그냥 자동 상속됨.
4. 제어자 (접근 제어자, static, final)
- 접근 제어자:
public/private/protected. 외부에서 접근 가능한지 여부.
- static:
클래스 단위 공유(위에서 봄).
- final:
변경 불가(상수 또는 오버라이딩 방지).
5. 다형성(Polymorphism)
(1) 다형성이란?
- What:
부모 타입 변수에 자식 객체를 담을 수 있는 성질.
- Why:
코드 유연성, 확장성. 한 줄로 여러 객체를 처리 가능.
- How:
Parent p = new Child();
(2) 참조변수와 인스턴스 간의 관계
- 참조변수 타입이 할 수 있는 건 “선언된 타입”에 따라감.
실제 동작(오버라이딩)은 “객체 타입”에 따라감.
(3) 다형성의 활용
Parent[] arr = new Parent[2];
arr[0] = new Child1();
arr[1] = new Child2();
CHAPTER 08. 인터페이스
1. 인터페이스 (Interface)
- What:
메서드의 “선언(틀)”만 있고, 구현은 없음.
- Why:
다형성, 표준 규칙 제공. 여러 클래스가 동일한 동작 보장.
- How:
interface I { void doIt(); }
(2) 인터페이스의 구현
interface Animal { void eat(); }
class Dog implements Animal {
public void eat() { System.out.println("사료 먹기"); }
}
(3) 인터페이스의 실제 활용
(4) 인터페이스의 다형성
- 인터페이스 타입 변수에 구현체 객체를 담아 쓸 수 있음.
Animal a = new Dog();
a.eat();
CHAPTER 09. 예외 처리 (Exception Handling)
1. try-catch / finally
- What:
예외(오류) 발생 시, 프로그램이 죽지 않도록 처리하는 구문.
- How:
try {
// 위험한 코드
} catch(Exception e) {
// 예외 발생시 처리
} finally {
// 항상 실행
}
2. 예외의 다시 던지기 (throws)
- What:
메서드에서 예외를 “밖으로 미룸”.
- How:
void m() throws Exception { ... }
CHAPTER 10. 기본 API 클래스 알아보기
1. 문자열 클래스
- String, StringBuilder 등.
문자열 다루는 클래스.
2. java.util.Random
3. java.util.Scanner
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
4. java.time 패키지
- 날짜/시간 처리 클래스(LocalDate, LocalTime, LocalDateTime 등).
LocalDate now = LocalDate.now();
LocalDate d = LocalDate.of(2025, 5, 19);
LocalDate changed = now.with(ChronoField.DAY_OF_MONTH, 15);
CHAPTER 11. 컬렉션 프레임워크
1. 컬렉션 프레임워크란?
- What:
여러 데이터를 “묶어서” 다루는 구조(리스트, 집합, 맵 등).
- Why:
배열보다 유연하고 기능이 많음.
- How:
ArrayList, HashMap 등 사용.
List (ArrayList)
ArrayList<String> list = new ArrayList<>();
list.add("A");
System.out.println(list.get(0));
Map (HashMap)
HashMap<String, String> map = new HashMap<>();
map.put("apple", "사과");
System.out.println(map.get("apple"));