본문 바로가기

자바12

[Java] 전략패턴 디자인 패턴 디자인 패턴이란 객체 지향 설계 과정에서 빈번하게 사용되는 설계를 모아 패턴화 한 것입니다. 즉, 재설계를 최소화 하며 요구사항의 변화를 수용할 수 있는 패턴을 정리한 것이라고 생각하면 좋습니다. 아래 예시를 보겠습니다. // 만약 Grade가 z까지 있다면...?? 후..;; public String calculateGrade(final int score) { if (score < 50) { return "F"; } else if (score < 60) { return "D"; } else if (score < 70) { return "C"; } else if (score < 80) { return "B"; } else if (score < 90) { return "A"; } else { .. 2022. 3. 15.
[Java] Synchronized 이해하기 자바에서는 멀티 쓰레드 환경에서 안정성을 부여하기 위해 synchronized라는 예약어를 제공합니다. 하지만 일반적으로 순수 자바로 프로그래밍을 하다보면 멀티 쓰레드를 경험할 일이 없어 해당 예약어에 대해 이해하는 것이 어려운데요. 이번 포스팅에는 synchronized예약어를 이해하고 간단하게 실습하는 시간을 갖고자 합니다. 소스코드 synchronized란? synchronized는 사전적으로 동시에 일어나다. 라는 의미를 갖고 있습니다. 그 의미처럼 자바에서도 동시에 일어나는 일에 대해 안정적으로 처리하기 위해 해당 키워드가 생겼습니다. 동시에 하나의 객체에 접근하는 여러 쓰레드에 대해 , 하나씩 들어오세요하며 안내하는 존재라고 생각하면 쉬울 것 같습니다. synchronized는 메서드와 블록으.. 2022. 3. 5.
[Java] Enum타입 사용하기 다음 주부터 진행되는 로또 미션의 프로그래밍 요구사항에는 java enum을 적용해 프로그래밍을 구현한다. 라는 내용이 있습니다. 이번 포스팅에서는 enum 타입이 무엇이고, 어떻게 사용할 수 있을지 직접 코드로 작성해보는 시간을 갖고자 합니다. Enum을 사용하지 않으면 불편한 점? 왜 enum 을 사용해야 하는지 알아보기에 앞서 과거 enum을 모르던 시절 사용자 입력값에 대한 선택지를 변환하여 특정 로직을 실행시키던 코드를 살펴봅시다. 로직 실행에 큰 문제는 없어보입니다만.. 사용하는 측면에서 문제가 많습니다. 선택지가 변경되어 Yes가 1이 아닌 Hell Yes!! 가 1이 된다면? selection 비교시 실수로 1이 아닌 100을 비교하는 코드가 있다면? 이렇게 상수를 열거형으로 사용하게 되면.. 2022. 2. 19.
[Java] JUnit으로 System.in, System.out 테스트하기 deep dive 레벨 1 미션 레이싱카는 콘솔을 기반으로 진행됩니다. 1단계를 진행하며 작성한 단위 테스트에서는 입, 출력값을 테스트 할 필요가 없었지만 2단계 미션인 MVC리팩토링 과정에서는 컨트롤러를 테스트하는 방법에 대해 많이 고민하게 될 텐데요. 이번 포스팅에서는 입, 출력값에 대한 테스트를 추상클래스로 작성하여 상속을 통해 실제 테스트가 진행되는 코드를 깔끔하게 유지하면서 I/O를 테스트 할 수 있는 코드를 작성해보고자 합니다. Scanner 와 System.in 먼저 테스트를 진행하기 위해서는 사용자가 원하는 입력값을 입력해야 합니다. 이번 미션의 프로덕션 코드에서 아래 예시처럼 Scanner 인스턴스를 System.in 인자로 생성 했을텐데요. Scanner scanner = new Scanner(Syste.. 2022. 2. 16.
[Java] 인터페이스로 분리하여 객체 테스트하기 level 1 첫 미션으로 프리코스에서 진행한 racingGame 을 페어 프로그래밍으로 구현하는 미션을 받았다. TDD로 구현하라는 미션덕분에 많은 크루들이 Random 값을 테스트하는 방법, System.in을 테스트하는 방법에 대해 궁금증을 품었고 그 중에서도 Random 값에 대한 테스트에 어려움을 겪었던 것 같다. 내 코드와 리뷰 나는 과거 Mockito를 사용한 경험이 있어 Mockito 라이브러리를 가져와 임의의 랜덤값을 제공하는 가짜 객체를 만들어 테스트 했다. MockRandomGenerator Random 값을 가짜로 전달해줄 수 있는 임의의 추상 클래스를 생성하여 상속받아 테스트했다. public abstract class MockRandomGenerator { MockedStatic.. 2022. 2. 13.
3주간의 우아한 테크코스 프리코스를 마치며 아직 3주 차 과제가 끝나려면 약 5일 정도 남았지만, 이미 과제를 제출하고 지난 기간을 정리하는 과정 중에 있어 과정이 끝나기 전 미리 소감을 적습니다. 프리코스 3주차 미션을 메일로 받았다. 이때 미션에 대한 설명보다 내 눈에 먼저 들어온 두 문장이 있다. 두 문장의 내용은 각각 다음과 같다. 블로그, SNS에 프리코스 후기를 올리고 저희에게 공유해준다면 과정을 준비한 저희에게 큰 힘이 될 것 같아요. 지원 플랫폼에 제출해주는 소감을 PR 본문에 추가한다면 서로의 성장에 도움이 되지 않을까요? 첫 번째 문장 덕분에 지금 이 블로그를 개설하고 글을 쓰고 있다. 이번 과정이 내게 정말 큰 도움이 되었기에 나도 힘을 주고 싶다는 마음뿐이다. 그리고 이 글 본문은 두 번째 문장에 대한 나의 생각을 바탕으로 .. 2021. 12. 10.