일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Project Bee
- 상속 관계 매핑
- 경우의 수
- 노마드코더
- 원복
- 티스토리챌린지
- springboot
- React Natvive
- multipart upload
- 자료구조
- bfs dfs
- react
- Navigation
- 완전탐색
- 해외 대외활동
- React Native
- ReactNative
- 구현
- FlatList
- BFS
- 버튼 활성화
- service 테스트
- 창의충전소
- 이영직
- 비트마스킹
- 폴더구조
- 오블완
- web view
- 백준 1992
- 휴대폰 기기
- Today
- Total
유미의 기록들
[개인 과제 - Java] 계산기 프로그램 (Level 3) 본문
📌요구사항
1. Enum 타입을 활용하여 +,-,*,/,%의 연산자 타입에 대한 정보를 관리하도록 구현 - Enum
2. 양의 정수 뿐만 아니라 실수 타입의 값을 전달 받았을 경우에도 연산이 수행되도록 구현 -제네릭
3. Scanner로 입력 받은 값보다 큰 결과값들을 출력 - Lamda & Stream
📝궁금한점
Enum타입
요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형, 즉 상수 데이터들의 집합
프로그래밍을 하다보면 배열과 리스트처럼 여러개의 묶음 데이터를 다루는 일이 많다. 이런 데이터 중에는 '요일', '계절'과 같은 제한된 값만 가지는 경우가 존재한다
ex) 요일 - 월,화,수,목,금 / 계절 - 봄, 여름, 가을, 겨울
이런 데이터 묶음을 Enum타입으로 묶어주면 구조적인 프로그래밍이 가능하다
enum Day{
MONDAY,TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
enum Month{
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY,
AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
}
이렇게 객체지향적으로 객체화 해서 관리 할 수 있다
장점
1. 코드가 단순하고, 가독성이 좋아진다
2. Enum에서 한번에 관리하기 때문에 수정이 필요하면 Enum 코드에만 수정하면 된다
→ 리팩토링 시 변경 범위가 최소화 된다
3. IDE의 지원(오타검증, 자동완성 등)을 받을 수 있다
4. switch문에서도 사용할 수 있다
5. 키워드 enum을 사용해서 구현 의도가 열거 임을 알 수 있다
제네릭 (Generic)
클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
ArrayList나 HashMap 등을 생성할 때 <>안에 타입을 지정해준다. 이때 <>가 바로 제네릭이
그런데 Integer타입도 지원하고, Double타입도 지원하고 싶을 때 타입에 따라 하나씩 만드는 방법은 너무 비효율적이다 따라서 이 문제를 해결하기 위해서 제네릭을 사용한다
class Calculator<T> {
List<T> results = new ArrayList<>();
public void add(T result) {
results.add(result);
}
}
// 제네릭 타입 매개변수에 정수 타입을 할당
Calculator<Integer> calculator = new Calculator<>();
// 제네릭 타입 매개변수에 실수 타입을 할당
Calculator<Double> calculator = new Calculator<>();
// 제네릭 타입 매개변수에 문자열 타입을 할당
Calculator<String> calculator = new Calculator<>();
Calculator클래스에서 식별자 기호 T를 클래스 필드와 메소드 매개변수 타입으로 지정한 다음
생성코드에 <>안에 지정해주고 싶은 타입을 할당해주면 제네릭 클래스에서 T가 지정된 타입으로 모두 변환되어 클래스의 타입이 결정되는 것이다.
외부에서 지정한 타입을 받아와서 클래스 내부의 <T> 타입이 구체적으로 설정되는 것으로 구체화라고 한다
장점
1. 비슷하나 기능을 지원하는 경우, 코드의 재사용성이 높아진다
2. 클래스 외부에서 타입을 지정해주기 때문에 타입 관리하기가 편하다
3. 잘못된 타입이 들어 올 수 있는 것을 컴파일 단계에서 방지할 수 있다
제네릭 타입을 두개로 둘 수도 있다
public class ClassName <T, K> { ... }
제한된 Generic과 와일드 카드
만약에 특정 범위 내로 좁혀서 제한하고 싶다면 extends, super, ? (와일드 카드) 세가지 방식이 있다
extends 뒤에 오는 타입이 최상위 타입으로 한계가 정해지는 것 (T타입의 자식타입만 가능)
super 뒤에 오는 타입이 최하위 타입으로 한계가 정해지는 것 (T타입의 부모타입만 가능)
<?> 는 <? extends Object> 와 마찬가지이다 (Object는 자바에서 모든 사용자 클래스의 최상위 타입)
즉, 어떤 타입이든 상관없다는 의미이다
수를 표현하는 클래스만 받고 싶은 경우에는 extends Number로 표현할 수 있다
Integer, Long, Byte, Double, Float, Short와 같은 래퍼클래스들은 Number 클래스의 상속을 받기 때문이다
<K extends Number>
'대외활동 기록 > 내일배움캠프' 카테고리의 다른 글
[개인 과제 -Spring숙련] JPA를 활용한 일정관리 앱 서버 설계 (Level 1) (0) | 2024.08.22 |
---|---|
[개인 과제 - Spring입문] 일정 관리 앱 서버 (0) | 2024.08.16 |
[팀 과제 - Java] 캠프 관리 프로그램 (0) | 2024.08.05 |
[개인 과제 -Java] 계산기 프로그램 (Level 2) (0) | 2024.08.01 |
[개인 과제 -Java] 계산기 프로그램 (Level 1) (0) | 2024.07.31 |