25.05.20 시험 대비

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"));