본문 바로가기

전체 글59

[JAVA] enum을 잘 활용하기 위한 기본 지식. 자바에서는 enum이라는 열거형 자료형을 표현하기 위한 강력한 도구를 제공해준다. 하지만 enum은 매우 강력한 도구임에도 불구하고, 절차지향 프로그래밍을 해온 사람들에게는 약간의 혼란을 야기한다. 자바의 enum은 c언어의 그것과 무엇이 다를까? 보통 프로그래밍을 처음 배울때 c언어로 시작할 것이다.(요즘은 파이썬으로 많이 하는 것 같지만..) 그리고 열거형 자료형을 배울 떄 아래와 같은 코드를 많이 봐왔을 것 이다. enum DayOfWeek { Sunday = 0, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; 아주 눈에 익은 코드다. 이렇게 정의하면 우리는 Sunday, Monday와 같이 특정 값을 나타내는 변수를 간편히 가져와 사용할 수.. 2021. 4. 22.
[oop] 원시값을 포장하라! 소트웍스 앤솔러지:소프트웨어 기술과 혁신에 관한 에세이 에는 원시값을 포장하라는 내용이 나온다. 왜 우리는 원시값을 포장해야하는걸까? 모두가 알고 있듯, 객체지향은 캡슐화, 추상화, 상속성, 다형성과 같은 특성을 가지고 있다. 그중에 원시값의 포장은 캡슐화와 매우 큰 연관성을 가지고 있다. 캡슐화에 관해서는 이곳 을 참조 바란다. 즉, 데이터와 그 로직을 한곳에 모아두라는 의미이다. 그렇게 해서 객체가 생성되면, 그 객체에는 생명이 생긴다. 단순한 데이터 덩어리에서 객체라는 하나의 유기체로 승격되는 것 이다. public class Wallet { Card card; long cash; public void pay(long fee) { if(cash - fee < 0 ) { throw new Ille.. 2021. 4. 20.
모던 자바 인 액션 스터디 6. 컬렉션 API 개선 파즈 Arrays.asList와List.of 의 차이점은 무엇일까요 ?? map.put과map.replace두메서드 다 값 변경이 가능한데 그렇다면 왜 replace라는 메서드가 따로 있을까요 ?? Map에는 computeIfAbsent이라는 메서드가 존재합니다. 만약 key가 존재하지 않는다면 키를 이용해서 새 값을 계산하고 맵을 추가하는 메서드입니다. 추가로, Map에는 putIfAbsent라는 메서드도 있습니다. 키가 존재 하지 않는다면 value를 바로 집어넣어주는 메서드입니다. public static void main(String[] args) { Map map = new HashMap(); map.put(1, 1); map.putIfAbsent(2, calculate(2)); map.comp.. 2021. 3. 25.
모던 자바 인 액션 스터디 5. 병렬 데이터 처리와 성능 웨지 7장문제 나갑니당~~ 7장 넘 어렵네요 O/X 3개 낼게요 이유도 적어주셔요병렬 스트림 문제 동시성 문제를 해결했다면, 병렬 스트림을 활용하는게 항상 성능적으로 우수하다. 내부적으로 스트림이 분할되는 기준에 대해서는 개발자가 알 수 없다. Spliterator의 Characteristics 옵션은 Collectors의 것과 동일하다 나의 답 더보기 X 그렇지 않다. 원소의 개수가 적을 경우, 병렬 계산을 위한 스래드 생성 비용이 클 수도 있다. X 그렇지 않다. 스트림의 분할 기준은 개발자가 정해서 구현한다(기본으로는 프로세서 개수 기준이다). X 그렇지 않다. 아쉽게도 둘은 서로 다른 요소를 가지고 있다 웨지의 답 x ,스레드를 스위칭하는 오버헤드가 더 들수도 있다. 벤치마크를 통해 오버헤드에 걸.. 2021. 3. 23.
모던 자바 인 액션 스터디 4. 스트림으로 데이터 수집 웨지 6장 퀴즈 나갑니다아OX퀴즈 5개 할게용 이유도 달아주심 좋아요 GroupingBy를 활용하여 PartitionBy와 동일한 분할을 구현할 수 있다 (O / X) PartitionBy를 활용하여 GroupingBy와 동일한 그룹핑을 구현할 수 있다 (O / X) Collectors의 정적 메소드 counting, summingInt, maxBy, minBy는 요소가 없을 경우 0을 반환한다. (O/X) 내 상황에 적합한 Collector 정적 메소드가 없을 경우엔 Collector인터페이스 구현체를 집적 구현하는 방법 밖에 없다. (O/X) 병렬 스트림인 경우 Collect도 항상 병렬 리듀싱을 실행한다. (O/X) 나의 답 더보기 1. O, groupingBy(i -> 조건식) 으로 같은 기능을 .. 2021. 3. 14.
객체지향의 "책임"의 함정에 빠지지 말자. 우테코의 블랙잭 미션을 진행하면서 피드백을 받은 부분이 있다. 먼저, 요구사항을 말하자면, 플레이어는 카드를 가지고 있고, 플레이어에게 점수를 요청하면 카드의 번호를 확인하여 점수를 계산하고 반환하는 구현이다. 기존의 나의 코드는 Player 클래스가 Deck클래스를 가지고 있고, Deck 클래스에게 카드 정보를 요청해서 점수를 Player가 계산해서 반환하도록 하였다. 아래와 같은 형식이다. 이러한 구조를 선택한것에는 큰 착각이 있었다. 객체의 책임과 역활을 생각하다 보니. "어쩌피 실제에서도 플레이어가 점수 계산하지 않나? 그러면 점수 계산의 책임을 플레이어에게 줘도 되겠군!" 이라는 생각을 해버리고 만 것이다. 하지만 객체지향에서 객체는 자율적인 존재이다 (의인화). 또한 객체지향의 기본 원칙인 캡.. 2021. 3. 9.