자바 프로그래밍 (3)
포스트
취소

자바 프로그래밍 (3)

table of contents

객체 지향 아시는구나

  • 추상화: 대상의 핵심적인 부분만 남기고 필요 없는 건 만들지를 마세요
  • 상속: 같은 특징을 갖는 것들끼리 묶어서 공통 모듈(기반 클래스)을 쓰세요
  • 다형성: 기반 클래스 하위호환 가능
    • 업캐스팅: 파생 클래스 상위호환, 대신 기반 클래스에 있는 것만 쓸 수 있음
    • 실무에서는 상속도 결합이 강하기 때문에 잘 안쓴다. 인터페이스를 쓰세요. + 확장 어렵고 단일 상속 제한 때문에 관리 어려움

인터페이스를 쓰세요

  • UI, API 다 인터페이스의 I를 쓴다. 컨트롤러임. 알맹이가 어떻게 생겼는지는 사용자에게 알릴 필요가 없고 사용자는 필요한 기능을 쓸 줄만 알면 됨.
  • 상속이랑 뭐가 다르세요?

    구분상속인터페이스
    사용 대상클래스 ← 클래스클래스 ← 인터페이스
    역할상속 (물려받음. 주는대로 써도 됨)구현 (구현의 의무를 떠맡음)
    수량1개만 상속 가능여러 개 받아도 됨
    받은 것위에서 정의된 내용까지 다 받음이름만 정해준 거임
    구현 의무안해도 쓰는 데 지장 없음해.

추상 클래스

  • 나는 여러 클래스를 상속하면서도 공통 멤버는 미리 정의해놓고 싶다 → 그런 님을 위한 추상 클래스
  • 사용 방식은 인터페이스와 동일

예외 처리

  • 사람들은 사용 설명서를 안읽는다. 당기세요도 안읽는다. 그게 아니어도 인터넷이 갑자기 끊긴다거나, 주점에 들어가서 돈까스를 열어제낀다거나 하는 등 다양한 이슈로 문제가 생긴다. → 누가 책임져? 개발자가 책임져…
    • 예: 나이를 숫자로 입력하세요 - “서른마흔다섯살”
  • 보통 이런 예외는 코드 문법상으로는 빨간 밑줄을 안쳐주기 때문에 코드를 쓸 때 똑바로 생각하고 미리 오류를 정의해놔야 한다 → 하지만 try-catch를 쓰라는 말은 아님
  • try-catch와 throw
    • try-catch: 내부적으로 다 처리하고 아무 일도 없었다..! 해버림. 그 ‘내부’마다 각자 try-catch 해야 해서 로직이 중복됨
      • 아예 쓰지 말라는 건가? → 아님. 굳이 밖에서 알 필요 없는 소소한 이슈들은 알아서 처리해도 됨. 예: 오류 출력만 해도 되는 경우, 바로 복구 가능한 경우
      • 멈추지 말고 계속 진행해야 하는 경우에도 try를 씀
    • throw: 예외를 호출자에게 집어던짐. 해결 책임을 상위에 전가함.
      • 이 오류가 내 책임이 아닐 때 씀. 던져져 올라간 예외들이 최상위에서 한번에 처리되도록 함. 핵심 로직 먼저 하고 예외 처리는 나중에 할 때에도 씀.
  • 커스텀 예외: 기본으로 제공되는 예외만으로는 설명이 부족한 경우 사용. 프로젝트 전용 예외 구현. → Exception 객체 상속 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.ArrayList;
import java.util.List;

public class DAY3_3 {
    public static void main(String[] args) {
        UserService userService = new UserService();

        try {
            userService.findUser("alice");  // 존재
            userService.findUser("zoe");  // 존재하지 않음
        } catch (UserNotFoundException e) {
            System.out.println("에러 발생: " + e.getMessage());
        }

        System.out.println("프로그램 종료");
    }
}

// 1. 사용자 정의 예외 클래스
class UserNotFoundException extends Exception {
    public UserNotFoundException(String message) {
        super(message);
    }
}

// 2. UserService: 유저 관리 기능
class UserService {
    private List<String> users;

    public UserService() {
        users = new ArrayList<>();
        // 유저 5명 등록
        users.add("alice");
        users.add("bob");
        users.add("charlie");
        users.add("david");
        users.add("emma");
    }

    // 유저 조회
    public void findUser(String name) throws UserNotFoundException {
        if (!users.contains(name)) {
            throw new UserNotFoundException(name + " 유저는 존재하지 않습니다.");
        }
        System.out.println(name + " 유저를 찾았습니다.");
    }
}
이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.

자바 프로그래밍 (2)

SQL 프로그래밍 (1)