💋 인트로 우아한테크코스 미션 중 블랙잭 미션을 진행할 때, 굉장히 핫한 주제가 있었다. 바로 상속과 조합이었다. 조합에 대해 처음 들어보았고, 찾아보려 검색했지만 이펙티브 자바에서 다루는 아이템 18 상속보다는 컴포지션을 사용하라에 대한 내용 외에 컴포지션에 대해 설명하는 내용을 찾아볼 수가 없었다. 그래서 직접 써보기로 했다! 👍 조합? 컴포지션? 조합 == 컴포지션 같은 말이다. 상속은 문제가 많다. 잘 사용하면 되는 일이지만, 상속을 하면서 내부 구현을 외부에 드러내지 않고 사용하기는 굉장히 어렵다. (상속의 문제점은 이 포스팅의 주제가 아니니, 더 구체적으로 설명하지 않겠다.) 이 포스팅은 상속이 좋다, 조합이 좋다를 강조하는 포스팅이 아니다. 상속을 사용하다가, 상속의 단점을 크게 느껴 조합을..
💋 인트로 지난주 우테코의 강의 주제는 함수형 프로그래밍이었다. 하지만 잘 이해가 되지 않았다.... 또 이리내와 함께 한 람다와 스트림 발표에서, 마코에게 질문을 받았다. "왜 stream의 최종연산 forEach에서 출력 외에 외부 변수에 변화를 주는 작업을 하면 안되나요?" 이 질문에 대답은 이펙티브 자바 아이템 46에 나와 있다. 아마 읽어도 잘 와닿지 않을 것이다.... 1. 스트림은 그저 또 하나의 API가 아닌, 함수형 프로그래밍에 기초한 패러다임이다. 2. 스트림 패러다임의 핵심은 계산을 일련의 변환으로 재구성하고 각 변환 단계는 이전 단계의 결과를 받아 처리하는 순수 함수여야 한다. 3. 순수 함수란 오직 입력만이 결과에 영향을 주는 함수를 말한다. 다른 가변 상태를 참조하지 않고, 함수..
2단계까지 구현한 '체스말을 움직일 수 있는' 체스판에서, King이 잡히면 게임을 종료하고, 그 전에 게임의 점수를 계산할 수 있는 기능을 만드는 것이 3단계였다. 👍 Controller 코드 이쁘게 정리하기 우선 나는 2단계까지 컨트롤러에서 명령을 받는 로직을 잘 구현하지 않았는데, start, end, status는 명령을 쉽게 검증할 수 있지만 move b2 b4와 같은 명령은 명령어가 move인지를 먼저 검사한 후에 뒤에 따라오는 b2, b4와 같은 positions도 검증해야 하기 때문에 조금 어렵게 느껴졌다. 허브 호출! 쫌 잘한다고 소문이 좀 도는 허브를 한 번 데려와봤다. 명령어를 처음부터 List의 타입으로 받으면 저장이 될테니 그렇게 바꾸면 된다는 것! 허브는 발생할 수 있는 상황에 ..
💋 코드 저장소 이건 우테코 리뷰어에게 받은 리뷰의 PR이고 [1,2단계 체스] 깃짱(조은기) 미션 제출합니다 by eunkeeee · Pull Request #463 · woowacourse/java-chess 디디 안녕하세요!!! 궁금한 점은 해당하는 부분에 코드리뷰로 적어놨어요! 이번 미션 너무 어려워서 구현이 좀 늦어졌네요...! 제 코드 리뷰해주셔서 감사합니다!!! github.com 이건 다른 크루들에게 받은 리뷰 PR이다. 깃짱의 체스 포니가 제일싫어 by eunkeeee · Pull Request #3 · woowacourse-code-review-study/java-chess 안녕 친구들 이번주는 꼼꼼히 리뷰갈겡 힘내자!!! github.com 💋 처음 해보는 3인 페어 우테코 인원이 홀..
스트림을 제대로 활용하려면 먼저 람다식에 대해 알아야 한다! 간단히 설명한 이전 링크를 먼저 들어가서 읽어주세요! 2023.03.07 - [JAVA] - [JAVA] 람다와 스트림(Lambda, Stream)(1): 람다는 함수형 인터페이스의 구현체이다? [JAVA] 람다와 스트림(Lambda, Stream)(1): 람다는 함수형 인터페이스의 구현체이다? 우아한테크코스에서 하는 발표(테코톡)에서 람다와 스트림 부분을 맡게 되어서 각별히 자세히 공부해 본 내용에 대한 포스팅이다. 이번에는 람다와 스트림의 기본적인 개념에 대해 간단히 다루 engineerinsight.tistory.com 💋 스트림의 시작 (자바8...ing) 스트림의 시작은 무엇이었을까? 반복문을 대체하기 위해 만들어졌을까...? 그건 아..
우아한테크코스에서 하는 발표(테코톡)에서 람다와 스트림 부분을 맡게 되어서 각별히 자세히 공부해 본 내용에 대한 포스팅이다. 이번에는 람다와 스트림의 기본적인 개념에 대해 간단히 다루어 보고, 우리가 당장 가지고 있는 코드를 어떻게 변경할 수 있을 지에 대해서 다루어 볼 것이다! 이 글에서는 개념과, 어떻게 활용할 것인지에 대해서만 집중적으로 다루고 그 외의 성능 문제, 직렬화 등등에 대해서는 다루지 않을 예정이다. 아직 배우는 단계에 있으므로, 잘못된 정보가 있다면 알려주세요! 그럼 고고! 람다와 스트림은 모두 자바8에서 도입되었다. 그래서 자바8부터는 이전의 자바와는 다르다는 의미에서 모던 자바라고도 하는데, 무튼 다른 만큼 새로운 것들이 좀 있다. 💋 람다식 (Lambda Expression) 내가..
머지는 아직 안 되었지만, 그냥 써보는 회고 💋 코드 저장소 Pull Request 링크 [2단계 - 사다리 게임 실행] 깃짱(조은기) 미션 제출합니다. by eunkeeee · Pull Request #188 · woowacourse/j 안녕하세요! 새로운 리뷰어님!!! 제 코드 읽어주셔서 감사합니다! 깃짱 드림. github.com 깃허브 링크 GitHub - eunkeeee/java-ladder: 사다리타기 미션을 위한 저장소 사다리타기 미션을 위한 저장소. Contribute to eunkeeee/java-ladder development by creating an account on GitHub. github.com 💋 리뷰어의 교체...?!! 지난 번 리뷰어 제이미가 진짜 1단계에서 엄청난 정..
평상시에 예외를 사용할 때는 아무 생각 없이 throw new IllegalArgumentException();으로 처리하곤 했다. 우테코에서 예외에 대해 다루는데, 뭔가 아리까리...? 용어부터 헷갈리기 시작했다. 나처럼 그런 분들이 혹시 또 있을 것 같아서 정리해봤다! 잘못된 정보는 언제나 댓글로 달아주세요! 💋 프로그램의 오류란? - 프로그램이 오작동 또는 비정상적으로 종료되는 원인을 프로그램 오류라고 한다. 💋 에러와 예외의 차이점? 에러는 코드를 수정하는 것으로 수습할 수 없는 심각한 오류이며, 일단 발생하면 복구가 어렵다. 예) OutOfMemoryError, ThreadDeath, StackOverflowError 등 예외란 비교적 덜 심각한 오류로, 코드 수정을 통해 해결할 수 있다. 오늘..
💋 널(null) - 값/참조가 없다는 개념 💋 널 안전성이 중요한 이유 개발자들이 변수를 사용하기 전에 널 값인지 매번 확인하지는 않는다. 이 경우 NullPointerException, NullReferenceException, Cannot read property of null와 같은 에러가 자주 발생하게 된다. 👍 널 안전성 자바, 러스트, C++을 포함한 많은 언어에서 지원하는 기능이다. 기본적으로 모든 값(변수, 매개변수, 리턴값)은 널값을 가질 수 있는데, 이 변수이름 뒤에 ? 기호를 붙이면 널값을 가질 수 있다는 의미이고, 널값 여부를 확인하지 않고서는 사용할 수 없도록 컴파일러가 강제하게 된다. Car? getFifthCar(List cars) { if (cars.size() < 5) {..