전체 글
[JAVA] 정적 팩토리 메소드
들어가며 우테코를 시작하고 난 이후로 정적 팩토리 메소드 라는 말을 많이 들어왔다. 이펙티브 자바 책을 보면 첫 장이 정적 팩토리 메소드인 만큼 한번 쯤 알고 싶었고, 이번 체스 미션에서 사용해보았기에 정리해보려고 한다. 정적 팩토리 메소드 란 ? 우리는 흔히 인스턴스 객체 생성을 하는데 생성자를 사용한다. new ~~() 이런식으로 작성을 하는데 이를 생성자가 아닌 정적(static)메소드로 하는 것을 정적 팩토리 메소드라고 한다. 체스미션에서 사용한 정적 팩토리 메소드이다. 이를 통해 Command를 만들었다. public static Command of(String command) { return validateCommand(command); } 정적 팩토리 메소드를 왜 사용하는가 ? 장점 이름을 ..
[디자인 패턴] 상태 패턴
들어가며 체스 미션을 진행하면서 상태 패턴을 사용하였다. 상태 패턴을 적용한 이유는 체스 게임이 시작, 종료, 진행 상태로 나누어진다고 생각하였다. 이에 대해 정리해보려고 한다. 상태 패턴 내부 상태를 바꿈으로써 객체가 행동을 바꿀 수 있게 해준다. 별도의 클래스로 캡슐화 한 후 다음 상태를 나타내는 객체에게 행동하도록 요구하여 상태를 변경할 수 있따. 체스 미션에는 시작, 진행, 종료 상태가 있다. 이 상태에 따라 코드를 구현하고자 한다면 final static int START = 0; final static int RUNNING = 1; final static int END = 2; int state = END; public void start(){ if (state == start) { state..
[우아한테크코스 5기] 레벨1 레벨인터뷰 회고
들어가며 3월 29일 첫 레벨 인터뷰를 진행하였다. 레벨 인터뷰를 진행하기 전에는 그냥 아는 것 이야기 하고 오고 모르면 어쩔 수 없지 라는 생각을 가지고 있었다. 하지만 막상 준비를 하며 내가 정확하게 알지 못하는 것이 많다고 느꼈고, 지식을 쌓아감에 있어서 양보다 질을 우선시 할 필요를 느꼈다. 하나를 알더라도 확실히 알 필요가 있을 것 같았다. 시작 나는 오전 시간에 토미와 함께 인터뷰를 진행하였다. 우리팀은 썬샷, 에단, 나, 가비, 저문, 매튜,마코 였다. 나의 앞 타임은 썬샷, 에단이였는데 둘 모두 말을 논리정연하게 잘 대답하였다. 그래서 그 다음 순서인 내가 더욱 떨렸다. 총 7명의 눈으로 나를 쳐다본다고 하니 너무 떨렸다. 최근에 이런 면접을 경험해보지 못해서 그런 것인지 어려웠다. 자신감..
[우아한테크코스 5기] 체스 2단계 학습 로그
GitHub 저장소 STEP 2 목표 변경 사항 개선할 점 배운 점 궁금한 점 나가며 📆 기간 : 2023.03.16~ 2023.03.27 들어가며 이번 3,4 단계에서는 처음으로 db를 사용해보았다. 재미있었지만 또 어려웠다. 학교에서 db를 배울 때 재미있었는데 실제로 자바에서 사용해보려니까 조금 다른 감이 없지 않아 있었다.😂 GitHub 저장소 체스 2차 PR 깃허브 주소 STEP 2 목표 추가된 요구사항 승패 및 점수 계산 어플리케이션 종료에도 db적용을 통해 재시작이 가능해야 한다. DB를 잘 사용해보는 것이 step2 의 목표이다. 변경 사항 Status status 명령어를 통해 점수를 알 수 있다. 처음에 명세를 보고 이해를 하지는 못하였으나 게임을 시작하였을 경우 status입력을 통..
[Gradle] dependency 차이점 (CompileOnly, RuntimeOnly, api, implementation)
들어가며 DB를 연동하면서 Gradle 에 runtimeOnly 'mysql:mysql-connector-java:8.0.28' 의존성을 추가해주었다. 아무 생각 없이 사용하였었는데 리뷰어인 토니로부터 이렇게 퀴즈를 받게 되었다 ! Classpath 클래스 혹은 Jar파일이 존재하는 위치이다. gradle의 Dependencies는 compieClasspath, runtimeClasspath, testCompileClasspath, testRuntimeClasspath 로 구분이 된다. 앞 2개는 로직을 실행할 때, 뒤 2개는 test 로직을 수행할 때 사용된다. CompileCalsspath 컴파일을 잘 수행하기 위해 필요한 클래스 및 jar을 나타낸다. RuntimeClasspath 런타임시 애플리..
[우아한 테크코스 5기] 체스 1단계 학습 로그
들어가며 GitHub 저장소 구현 기능들 궁금한 것 코드 리뷰 후기 📆 기간 : 2023.03.14~ 2023.03.16 들어가며 이번 체스 미션은 페어 케로와 함께 진행하게 되었다. 처음 만나자 마자 말 놓고 하자 라는 말을 들었다. 그렇게 진행했더니 전보다 훨씬 더 효율적이였던 것 같다. 좀 더 편하게 대화를 할 수 있었다. 우리는 체스 미션을 큰 고민없이 잘 구현했던 것 같다. 조금 더 효율적으로 작성할 수 도 있었을 것 같으나, 아쉽게도 서로 생각의 한계에 부딪혀서 😂.. 그래도 만족스러웠던 것 같다. 이번에는 어렵고 어색하다고 안써본 것을 피했던 것을 타파하고자 하였다. 블랙잭 미션에서 배웠던 상태패턴도 적용하였다. 크게 구조적으로는 문제가 없었던 것 같다. 전 미션과는 다르게 급하게 하지도 않..
[JAVA] 캐싱
들어가며 블랙잭 미션을 하면서 캐싱이라는 말을 처음 들어보았다. 내가 아는 Cache는 메모리 관련 내용 밖에 없었는데 자바에서 듣게 되니 궁금해서 알아보게 되었다. 캐시 캐시 란 데이터, 값을 미리 복사해 놓는 임시 장소를 의미한다. 이렇게 복사를 해놓는 이유는 미리 복사를 해 놓음으로써 값을 다시 계산하거나, 데이터에 접근하는 시간을 줄일 수 있다. 빠르게 데이터에 접근할 수 있는 것이다. 캐싱 캐싱이란 위에서 말한 ‘캐시’를 하는 것이다. 체스 미션에서의 캐싱 나의 체스 미션은 FILE & RANK 라는 행열로 이루어진 보드판 위에서 진행하는 게임이었다. 이는 enum타입으로 진행하였다. 처음에는 ‘a~h’ , ‘1~8’로만 enum을 만들어 놓고 사용자가 입력한 값에 대해서 그때 그때 찾는 방식으..
[우아한 테크코스 5기] 블랙잭 2단계 학습 로그
GitHub 저장소 STEP 2 목표 변경 사항 개선할 점 배운 점 궁금한 점 후기 📆 기간 : 2023.03.02 ~ 2022.03.14 GitHub 저장소 블랙잭 2차 PR 깃허브 주소 STEP 2 목표 추가된 요구사항 플레이어는 베팅 금액을 정해야 한다. 베팅 금액에 따른 수익을 출력한다. 인스턴스 변수를 최대한 줄이고 싶었다. 그리고 최대한 깔끔하게 작성을 하고 싶었다. 내 희망사항.. 변경 사항 BettingMoney 이번 미션에서 블랙잭의 betting금액을 추가하는 요구사항이 생겼다. 베팅 금액 값 객체로써 사용하였다. 이는 Player가 들고 있게 하려고 하였다. 그러다보니 1단계에서 상속구조 가 Player -> Dealer였는데 딜러또한 베팅금액이 필요해졌다. 그래서 구조를 바꾸기로 하..
[JAVA] 상속 과 조합
들어가며 자바에는 상속이라는 개념이 있다. 우테코 과제를 진행하면서 상속을 사용했더라면 더 좋았을텐데.. 했지만 시간의 부족함으로 처리하지 못했다. 그래서 상속을 한번 정리해보기로 했다. 상속 자바에는 부모클래스와 자식클래스가 있다. 자식 클래스는 부모 클래스의 멤버를 상속받아 그대로 사용할 수 있다. 상속을 하는 이유 ? 이미 만들어져 있는 클래스를 재사용 할 수 있어서 효율적이고 중복된 코드가 줄어든다. 유지보수가 쉽고, 확장성이 용이하고, 재사용이 가능하고, 코드가 간결해진다. 클래스 상속 자식 클래스 이름 앞에 extends 키워드를 사용한다. 다중상속을 허용하지 않는다. //부모 public class Parent { ... }; //상속받은 자식 public class Child extends..