전체 글

· JAVA
이번 블랙잭 미션에서 나는 상속을 사용했다.  왜 상속을 사용했나? 인터페이스이 말을 하기에 앞서 나는 인터페이스로 조합이나 상속을 적용하는 것을 고려하지 않았다.  일단 제일 처음 고민 했던 건 인터페이스다 하지만 요구사항을 보고 바로 철회했다. 내가 생각하는 인터페이스의 장점은 아래와 같다.   아래 코드는 `Driver`가 `K3Car`를 운전하는 코드이다.public class K3Car { public void startEngine() { System.out.println("K3Car.startEngine"); } public void offEngine() { System.out.println("K3Car.offEngine"); } public void pressAccelerator(..
· JAVA
출석 미션을 하다가 페어가 물어봤다."isBlank()과 isEmpty()의 차이가 뭐야?"나는 그냥 단순히 blank는 스페이스 같은 임의의 공백도 다 잡아내고 isEmpty는 아무것도 입력하지 않으면 true라고 했는데 내가 생각해도 너무 대충 알고 있는 것 같아 제대로 공부할 필요성을 느꼈다.  사실 지금까지 대강 알고 해왔다는 것에 반성했다.   자 그럼 이제부터 자세히 알아보자!!  1. isEmpty() 문자열의 길이가 0이면 `ture`를 반환한다.내부적으로 `isEmpty()`는 `String`객체의 텍스트를 나타내는 바이트 배열의 길이에 의존한다.    게다가 `isEmpty()`메서드는 텍스트가 비어 있는지 아닌지를 계산하기 위해 모든 유형의 문자를 계산한다. 따라서 빈 공백, 표, 줄..
· JAVA
우테코에서 출석 미션을 하는데 Comparable을 사용할 일이 많았다.  페어프로그래밍 하면서 페어에게 설명해주고 싶었는데 항상 관성적으로 써오던 인터페이스라 그냥 '객체를 서로 비교할 때 사용하시면 좋습니다'라는 말 밖에 생각나지 않았다. 그렇다.  Comaprable에 대해 제대로 공부해본 적이 없었다.  그래서 지금 하고자 한다.   1. Comparable은 무엇인가?Comaprable은 이 객체와 다른 객체를 비교할 수 있다는 것을 의미하는 인터페이스이다.  `java.lang.Comparable` 형태로 존재하며, T라는 제네릭 타입을 통해 "어떤 타입을 비교할 건지"를 지정해준다.자바 API 문서를 확인해보면, Comparable은 다음과 같이 정의되어 있다.     Comparable 주..
· JAVA
나는 인터페이스를 꽤 자주 사용한다.  최근사용은 랜덤값을 테스트 하기위해 전략패턴을 사용했는 데 그 때 아주 잘 사용했다.   그렇지만 막사용하지도 않는다.     글을 먼저 작성하기전에 개념부터 알아보자  제목 자체가 추상 클래스보다는 인터페이스이다.   그렇다면 추상 클래스는 뭐고 인터페이스는 무엇인지 먼저 알아보자    그렇다면 책에서는 왜 추상 클래스보다 인터페이스를 우선하라고 하는 걸까? 어떤 장점이 있어서 이렇게 말하는 걸까? 추상 클래스(Abstract Class)자바에서 추상 클래스는 "공통된 뼈대"를 정의하고 구체적인 구현은 자식 클래스에게 맡기는 데 사용한다.추상 메서드(몽통 없는 메서드 선언) 하나 이상을 포함할 수 있다.인스턴스(객체)를 직접 만들 수 없다.다른 클래스가 상속받아 ..
· JAVA/개념
이번에 출석으로 페어프로그래밍하다가 처음 안 사실이있다. 바로 `yyyy-MM-dd`와 `YYYY-MM-dd`가 다르다는 사실!나는 처음 알았다.  과연 둘은 뭐가 그렇게 다를까?  둘의 가장 큰 차이점은 y와 Y가 각각 다른 개념의 연도를 의미한다는 것이다.  특히 `YYYY`는 ISO-8601의 Week-based year를 따르기 때문에 연초와 연말에 의외의 값이 나올 수 있다. ISO 8601은 날짜와 시간의 표준 형식을 정의하는 국제 표준입니다. 이 표준에서는 연도를 나타내는 다양한 형식을 다루며, 특히 주 기반 연도(week-based year)에 대한 내용을 포함하고 있습니다. 이게 무슨 말이냐? 1️⃣ yyyy-MM-dd yyyy는 달력을 기준으로 한 연도를 의미한다.  즉, 우리가 보통 ..
· JAVA/개념
public LottoNumbers(final List lottoNumbers) { validateLottoNumbers(lottoNumbers); this.lottoNumbers = ensureSorted(lottoNumbers); } `LottoNumbers`라는로또 미션을 수행하던 중에 구두로 리뷰를 받은 적이 있다."외부에서 전달된 `List`를 그대로 내부 필드에 할당하면, 외부에서 리스트를 변경할 때 내부 필드도 함께 영향을 받는 문제가 발생할 수 있지 않을까요?" 맞는 말이었다.  왜 내가 고려하지 않았을까? 생각보다 관성적으로 코드를 작성하고 있는 순간들이 많다는 것을 다시 한 번 깨달았다.   🚨 외부에서 리스트를 그대로 내부 필드에 할당하면 발생하는 문제..
· JAVA/개념
코드를 작성하다가 이러한 질문을 받았다.   나의 답변은 간단했다."자주 사용하는 상수를 모아놓은 상수 클래스 즉, 정적 변수만 사용하는 클래스이기 때문에 인스턴스가 필요하지 않기 때문에 private 으로 선언했습니다."   그런데 뭔가 이 이상 답변하지 못한다는게 아쉬웠다.적어도 파생되는 개념들을 설명할 수 있어야 한다고 생각이 들었다.  그래서 다시 공부해보기로 했다. 내가 유틸이나 상수클래스등에는 `private` 생성자를 해놓아야 한다는 말을 처음 들은 곳은 Effective Java Item 4  "인스턴스화를 막으려거든 `private` 생성자를 사용하라"였다.   해당 내용을 이전에 발표했던 내용을 사용해서 정리하자면 아래와 같다.    🚀 자바에서 인스턴스가 필요하지 않는 경우자바에서 ..
🎉 1차 합격 나한테 프리코스는 아주 좋은 배움의 장이었다. 백엔드로 시작하고 나서 그동안 '구현'자체에만 집중해 왔다. 자바의 기본기나 클린코드, 테스트 코드는 늘 후순위였다.사실 자바를 어느 정도만 익히고 바로 스프링과 DB 등을 공부하고 "일단 구현부터"라는 생각으로 공부를 해왔기 때문이다.  나는 실제로 무언가를 만들어봐야 큰 그림이 보이고, 그 과정에서 부족한 점을 하나둘씩 보완하는 스타일이다. 그래서 처음 백엔드 공부할 때도 내 학습 방식에 맞춰 직접 구현하는 데 더 집중했다. 하지만 그렇게 만들다 보니 자바 기본기와 클린 코드, 테스트 코드가 상대적으로 약해져서 늘 갈증을 느꼈다. 그러던 중 우테코 모집 공고를 보고 프리코스를 시작했는데, 그동안의 갈증을 조금씩이나마 해소할 수 있었다. 이..
· JAVA/개념
개발하다 보면 "객체가 같은지 확인해볼까?"라는 순간이 자주 옵니다. ==만 쓰면 되지 않냐고요? 사실 ==는 객체의 참조값(주소)를 비교하기 때문에, 우리가 진짜 원하는 값 비교는 안 되는 경우가 많습니다. 그때 등장하는 게 바로 equals입니다. 기본적으로 Object 클래스에서 제공되지만, 직접 정의해야 하는 경우도 꽤 많습니다. 1️⃣ 언제 equals를 정의해야 할까? 1. 객체의 "값"을 기준으로 비교하고 싶을 때예를 들어, 같은 이름과 나이를 가진 사람이 같은 사람으로 간주되어야 한다면, equals를 정의해야 합니다. 그렇지 않으면 기본 equals는 객체의 주소값(물리적 동치)을 비교하기 때문에 다른 객체로 판단될 수 있습니다. 두 객체가 "물리적으로 같음"이 아니라 "논리적으로 같음"..
개발자성장기
개발 공부 노트