자바 기본 문법(4)

오정빈·2025년 9월 22일

내일배움캠프

목록 보기
12/22

2025 09 17 스파르타 코딩클럽 13일차

1. 인터페이스 (Interface)

  • 설계의 표준: 클래스가 따라야 할 최소한의 공통 규칙을 정의.\
  • 목적: 일관성을 유지하면서 클래스가 고유한 특색을 확장할 수
    있도록 함.\
  • 특징:
    • 모든 메서드는 기본적으로 public abstract (Java 8 이후
      default, static 메서드 허용).\
    • 모든 변수는 public static final (상수).\
    • 다중 상속 가능 (interface A extends B, C).\
  • 사용 키워드:
    • implements → 클래스가 인터페이스를 구현할 때.\
    • extends → 클래스 → 클래스 상속 / 인터페이스 → 인터페이스 상속.

2. 캡슐화 (Encapsulation)

  • 정의: 외부에서 직접 접근하지 못하게 하고, 접근을 제어하는 것.\
  • 방법:
    • 멤버 변수는 private으로 선언.\
    • getter, setter 메서드를 통해 접근.\
  • 장점: 데이터 보호, 유지보수 용이, 코드 안정성 향상.

3. 상속 (Inheritance)

  • 정의: 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아
    사용하는 것.\
  • 목적: 코드 재사용성, 확장성.\
  • 관련 키워드:
    • super → 부모의 생성자, 변수, 메서드 호출.\
    • 메소드 오버라이딩(Overriding): 부모 메서드를 자식이 재정의.\
    • 접근 제어자는 부모보다 좁게는 불가능, 더 넓게는 가능.

4. 추상 클래스 (Abstract Class)

  • 정의: 공통 기능을 제공하면서, 일부 메서드 구현을 강제.\
  • 특징:
    • abstract 키워드 사용.\
    • 추상 메서드는 구현이 없음 → 반드시 자식 클래스에서 구현해야 함.\
    • 인스턴스 생성 불가 (new 불가).

5. 추상화 (Abstraction)

  • 정의: 불필요한 세부 사항은 감추고 본질적인 것만 표현하는 것.\
  • 목적: 복잡성을 줄이고 핵심 로직에 집중.\
  • 방법:
    • 인터페이스, 추상 클래스 사용.\
    • 예: 자동차 → "운전한다"는 기능만 신경, 엔진 구조는 감춤.

6. 다형성 (Polymorphism)

  • 정의: 하나의 타입으로 여러 객체를 다룰 수 있는 성질.\
  • 조건: 상속과 오버라이딩이 전제.\
  • 형변환:
    • Upcasting: 자식 → 부모 (자동 형변환, 자식 고유 기능 X).\
    • Downcasting: 부모 → 자식 (강제 형변환 필요).
Parent p = new Child(); // 업캐스팅
Child c = (Child) p;    // 다운캐스팅

7. 예외 처리 (Exception Handling)

  • try-catch: 예외 발생 시 프로그램 비정상 종료를 막음.\
  • throw: 의도적으로 예외 발생 가능.\
  • 예외 구분:
    • RuntimeException (Unchecked Exception): 컴파일러가 예외처리
      강제 X.\
    • Exception (Checked Exception): 반드시 예외처리 필요. 미처리 시
      컴파일 에러.\
  • throws 키워드: 현재 메소드가 아닌 상위 메소드로 예외를 전달.\
  • 예외 전파: 예외는 발생 지점에서 처리되지 않으면 상위 메소드로
    계속 전파됨.

8. Optional

  • 목적: null 안전하게 다루기 위한 컨테이너 객체.\
  • 장점: NullPointerException 방지.\
  • 특징: 값이 있을 수도 있고, 없을 수도 있음.

9. 컬렉션 (Collection)

  • 정의: 자바에서 제공하는 자료구조 모음.

ArrayList

  • 크기 가변적, 중복 가능, 순서 유지.\
  • add, get, remove 메소드 사용.

HashSet

  • 순서 보장 X, 중복 불가.\
  • add, remove 사용 가능.\
  • get 불가능 (순서 없음).

HashMap

  • 키-값 구조, 키 중복 불가.\
  • put, get, remove, keySet, values 메소드 제공.

10. 제네릭 (Generics)

  • 정의: 클래스, 메소드 등에 타입 매개변수 <T>를 지정.\
  • 장점: 코드 재사용성, 타입 안정성.\
  • 특징:
    • 컴파일 시 타입 체크.\
    • 다운캐스팅 필요 없음.
class Box<T> {
    private T value;
    public void set(T value) { this.value = value; }
    public T get() { return value; }
}

11. 익명 클래스 & 람다

  • 익명 클래스: 이름이 없는 클래스, 일회성 정의.\
  • 람다식: 익명 클래스를 더 간결하게 표현.\
  • 함수형 인터페이스: 추상 메서드 1개만 선언 가능.
Runnable r = () -> System.out.println("람다식 실행");
new Thread(r).start();

12. 스트림 (Stream)

  • 목적: 데이터를 효율적으로 처리하는 흐름 제공.\
  • 단계:
    1. 데이터 준비 (stream(), parallelStream())\
    2. 중간 연산 (map, filter, sorted)\
    3. 최종 연산 (collect, forEach, count)
List<String> names = Arrays.asList("A", "B", "C");
names.stream().filter(s -> s.equals("B")).forEach(System.out::println);

13. 쓰레드 (Thread)

  • 정의: 독립적으로 실행되는 작업 단위.\
  • 싱글 쓰레드: 한 번에 하나의 작업.\
  • 멀티 쓰레드: 병렬 작업 가능 → 성능 향상.

구현 방법

  1. Thread 클래스 상속 → run() 오버라이드.\
  2. Runnable 인터페이스 구현 (권장).

주의사항

  • 실행 시 반드시 start() 사용.\
  • join() → 특정 쓰레드 종료까지 대기.
class MyThread extends Thread {
    public void run() {
        System.out.println("Thread 실행");
    }
}

public class Main {
    public static void main(String[] args) throws InterruptedException {
        MyThread t = new MyThread();
        t.start();
        t.join();
        System.out.println("메인 종료");
    }
}

0개의 댓글