항해 플러스 추천인 코드
지원페이지에서 추천 코드에 3ZTeU1
를 입력해주시면 20만원
할인 적용됩니다.
항해 플러스 과정에 관심이 있는 분들은 아래 링크를 통해 신청해보세요!
궁금하시거나 커피챗을 하고 싶으신 분들은 링크드인이나 kboxstar@gmail.com
으로 연락주세요.
항해99 플러스 백엔드 코스 6기 언어 사전 스터디 4주차 - Collection과 Wrapper 클래스
해당 블로그에서 갑작스럽게 4주차 (3) 부터 다루게 되어서 당황스러울 수 있다.
기존 블로그에서 진행하고 있던 포스팅이였으나 티스토리로 이사하게 되었다.
이전 주차의 내용이 궁금하다면 https://kilhyeonjun.vercel.app/tags/hanghae99 에서 확인 할 수 있다.
Collection
Collection에 대해서는 2주차 스터디에서 이미 다루었다.
해당 주차에서는 자료구조의 개념을 Java에서 어떻게 인터페이스를 통해 구현하는지, 그리고 제네릭이 어떻게 사용되는지에 대해 학습했다.
List와 배열
List
: 순서를 가지고 일렬로 나열된 데이터의 집합을 나타내는 추상적인 자료구조다.배열
: 프로그래밍 언어에서 가장 기본적인 자료구조로, 같은 타입의 데이터를 연속된 메모리 공간에 저장한다.
배열의 특징
- 빠른 접근: 인덱스를 통해 데이터에 빠르게 접근할 수 있다.
- 효율적인 순회: 연속된 메모리 공간에 저장되어 있어 데이터를 빠르게 순회할 수 있다.
- 제한된 유연성: 데이터의 추가나 삭제가 어렵다.
- 사용 사례: 데이터의 조회가 빈번하고 추가/삭제가 적은 경우에 유리하다.
List 인터페이스의 주요 연산
- 빈 리스트 생성
- 리스트의 비어있음 확인
- 리스트의 앞/뒤에 원소 삽입
- 리스트의 첫 원소 확인
- 첫 원소를 제외한 나머지 리스트 확인
Java의 List 인터페이스 구현
Java에서 List 인터페이스는 Collection 인터페이스를 확장하여 구현되어 있다.
주요 메서드는 다음과 같다.
public interface List<E> extends Collection<E> {
int size();
boolean isEmpty();
boolean add(E e);
boolean remove(Object o);
E get(int index);
E set(int index, E element);
void add(int index, E element);
E remove(int index);
// ... 기타 메서드
}
이 인터페이스는 제네릭을 사용하여 다양한 타입의 요소를 저장할 수 있도록 설계되었다.
Wrapper 클래스
Wrapper 클래스는 기본 데이터 타입(primitive type)을 객체로 다루기 위해 사용된다.
Java에서 제공하는 주요 Wrapper 클래스는 다음과 같다.
- Integer: int의 Wrapper 클래스
- Double: double의 Wrapper 클래스
- Boolean: boolean의 Wrapper 클래스
- Character: char의 Wrapper 클래스
이러한 Wrapper 클래스들은 기본 타입과 객체 타입 간의 변환, 문자열과의 변환, 값의 비교 등 다양한 기능을 제공한다.
Wrapper 클래스의 주요 메서드
valueOf()
: 기본 타입의 값을 Wrapper 객체로 변환한다.parseXxx()
: 문자열을 기본 타입으로 변환한다.toString()
: Wrapper 객체를 문자열로 변환한다.equals()
: 두 객체의 값이 같은지 비교한다.
Wrapper 클래스의 사용 예시
// Boxing
Integer i = Integer.valueOf(10);
// Unboxing
int j = i.intValue();
// Auto Boxing
Integer k = 10;
// Auto Unboxing
int l = k;
4주차 숙제 - 계산기 예외처리 해보기
프로그램 요구사항
- 사용자로부터 String 형태로만 입력을 받아야 한다.
- 입력받은 String을 숫자나 연산자로 변환할 때 예외 처리를 해야 한다.
- Pattern.match() 메서드를 사용하여 입력값의 유효성을 검사해야 한다.
- 잘못된 입력에 대해 BadInputException을 사용하여 예외를 처리해야 한다.
- 예외 발생 시 적절한 메시지를 출력하고 프로그램을 계속 실행해야 한다.
주요 구현 포인트
- Parser 클래스에서 parseFirstNum, parseSecondNum, parseOperator 메서드 구현
- Main 클래스에서 예외 처리를 포함한 반복 로직 구현
- 정규표현식을 사용한 입력 유효성 검사
- BadInputException을 활용한 예외 처리
- 예외 발생 위치에 대한 고려 및 주석으로 설명 추가
구현 코드
// Parser.java
import java.util.regex.Pattern;
public class Parser {
// 입력 유효성 검사를 Parser 클래스에서 수행
// 이유: 데이터의 파싱과 유효성 검사는 밀접하게 연관되어 있으며,
// Parser의 책임이라고 판단했기 때문
private static final String OPERATION_REG = "[+\\-*/]";
private static final String NUMBER_REG = "^[0-9]*$";
private final Calculator calculator = new Calculator();
public Parser parseFirstNum(String firstInput) throws BadInputException {
if (!Pattern.matches(OPERATION_REG, firstInput)) {
throw new BadInputException("숫자");
}
calculator.setFirstNumber(Integer.parseInt(firstInput));
return this;
}
public Parser parseSecondNum(String secondInput) throws BadInputException {
if (!Pattern.matches(NUMBER_REG, secondInput)) {
throw new BadInputException("숫자");
}
calculator.setSecondNumber(Integer.parseInt(secondInput));
return this;
}
public Parser parseOperator(String operationInput) throws BadInputException {
if (!Pattern.matches(OPERATION_REG, operationInput)) {
throw new BadInputException("연산자");
}
switch (operationInput) {
case "+":
calculator.setOperation(new AddOperation());
break;
case "-":
calculator.setOperation(new SubstractOperation());
break;
case "*":
calculator.setOperation(new MultipleOperation());
break;
case "/":
calculator.setOperation(new DivideOperation());
break;
default:
throw new BadInputException("연산자");
}
return this;
}
public double executeCalculator() {
return calculator.calculate();
}
}
// Main.java
public class Main {
public static void main(String[] args) {
boolean calculateEnded = false;
while (!calculateEnded) {
try {
calculateEnded = CalculatorApp.start();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
이 구현에서는 Parser 클래스에서 입력값의 유효성을 검사하고, 잘못된 입력에 대해 BadInputException을 발생시킵니다.
Main 클래스에서는 이 예외를 catch하여 오류 메시지를 출력하고 프로그램을 계속 실행합니다.
이러한 방식으로 사용자의 잘못된 입력에 대해 적절히 대응하면서도 프로그램의 안정성을 유지할 수 있습니다.
마치며
이번 포스팅에서는 Collection과 Wrapper 클래스에 대해 학습했다.
Collection은 Java에서 자료구조를 구현하는 인터페이스이며, List와 배열의 차이점, List 인터페이스의 주요 메서드 등을 살펴보았다.
Wrapper 클래스는 기본 데이터 타입을 객체로 다루기 위한 클래스로, 주요 메서드와 사용 예시를 살펴보았다.
'항해 > 사전스터디' 카테고리의 다른 글
항해99 사전 언어 스터디 5주차 (1) - 프로세스와 스레드 (1) | 2024.09.20 |
---|