분류 전체보기

👨‍🚀 우아한테크코스 5기

[20230313] 우아한테크코스 5기 LEVEL 1 - 블랙잭 1단계 & 2단계 회고

안녕하세요 ~ 헤나입니다 ! 😄 저번 글은 블랙잭 페어 회고 였습니다. 이번에는 "블랙잭 미션 1단계 & 2단계" 회고를 진행해보려고 합니다. 🟧 View과 Domain 분리 블랙잭 미션을 진행하면서 View와 Domain이 의존되는 부분에 고민이 생겼다. 💁‍♂️ 리뷰어 블랙잭 게임에서 hit을 하는 부분은 핵심 비즈니스 로직인데요..!컨트롤러의 역할이 맞을까요?? 🤔 Controller와 View 없이도 블랙잭 게임을 할 수 있도록 리팩토링해보면 어떨까요?? 💁‍♂️ 리뷰어 view와의 의존성을 최소화시키는게 왜? 좋은지에 대해서 고민해보셨을까요?? 😄 헤나 현재는 메인 로직이 실행되고 View에게 데이터를 건내줍니다.View는 받은 데이터를 가지고 출력해주는 형태입니다. 도메인은 블랙잭 규칙이 바뀌..

💬 언어

동일성과 동등성의 차이

동일성과 동등성의 차이 자바에서 무언가 같은지 비교할 때 어떻게 했을까 ? ==, equals()를 이용했다. 🟧 동일성 (identity) 그렇다면 ==과 equals()의 차이는 뭘까 ? 둘 다 동일하게 메모리 주소값을 비교하고 있다. ==, 재정의하지 않은 equals 동일성 검사 : 메모리 주소값을 비교한다. public class Object { public boolean equals(Object obj) { // equals는 내부에서 ==를 이용한다. // 주소가 동일한지 비교한다. return (this == obj); } } 🟧 동등성 (equality) equals는 왜 있는걸까 ? 주소값을 비교가 아닌 객체의 값을 비교하고 싶을 때 사용할 수 있다. (객체의 값이 동일할 경우라면 두 ..

💬 언어

equals 와 hashcode 를 함께 정의해야 하는 이유는?

equals 와 hashcode 를 함께 정의해야 하는 이유는? 🟧 equals ? Object 클래스에 있는 equals() 메서드. 두 개의 객체가 동일한지 확인하기 위해 사용한다. equals() 메서드를 보면 두 객체가 동일한 메모리 주소를 가리키는지 확인하고 있다. public class Object { public boolean equals(Object obj) { // 동일한 메모리 주소인지 확인한다. return (this == obj); } } 🟢 case01. equals 오버라이딩 하지 않은 경우 Name 객체의 내부 데이터가 같아도 equals로 비교하면 메모리 주소가 다르다. 이름01과 이름02는 동일하지 않다고 판단된다. @DisplayName("같은 값을 가져도 동일하지 않다고..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 22 - 인터페이스 타입을 정의하는 용도로만 사용하라

Item 22 인터페이스 타입을 정의하는 용도로만 사용하라 🟧 인터페이스는 타입을 정의한다. 인터페이스를 사용하면 메서드, 필드 등을 선언해야 한다. 인터페이스를 구현하는 클래스나 객체가 반드시 가져야하는 요구사항(시그니처 및 타입)을 명시해야 한다. 이러한 용도로서 인터페이스는 타입을 정의한다 할 수 있다. 아래는 interface Move, class Piece 가 있다. Piece는 Move의 구현체로 move() 메서드의 시그니처를 가지고 메서드를 구현한다. @DisplayName("인터페이스는 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다.") @Test void interface_reference() { // Move를 구현한 Piece를 참조할 수 있다. final Move m..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 20 - 추상 클래스보다는 인터페이스를 우선하라

Item 20 추상 클래스보다는 인터페이스를 우선하라 🟧 추상 클래스, 인터페이스 - 상속과 확장 추상 클래스 다중 상속이 불가능하다. 한 번 상속하면 이후에 확장하기 힘들다. 인터페이스 다중 상속이 가능하다. 기능을 추가하기 용이하다. 🤔 그러면 계속해서 확장가능한 인터페이스만 사용하면 되잖아 ?? (제목부터 인터페이스를 우선시하라는데 ??) 왜 그런 말이 나왔는지 일단 더 알아보자구요 ~ 🙅‍♂️ 먼저 추상 클래스와 인터페이스의 목적은 다릅니다. 🙅‍♂️ 🟧 목적이 다르고 차이점이 존재한다. 추상 클래스 상속받아 구현된 기능을 이용하고, 확장시킨다. 인터페이스 구현을 강제하기 때문에 같은 동작을 보장한다. 추상 클래스는 기존 기능을 이용해서 확장하고 인터페이스는 구현을 강제한다고..? 추상 클래스와 ..

👨‍🚀 우아한테크코스 5기

[20230311] 우아한테크코스 5기 LEVEL 1 - 블랙잭 페어 회고

안녕하세요 ~ 헤나입니다 ! 😁 저번 회고는 [20230225] 우아한 테크코스 5기 LEVEL 1 - 사다리 타기 1단계 & 2단계 회고였고 3번째 미션인 "블랙잭" 페어 회고를 진행하려고 합니다 ! 지금까지 모든 페어와 그림 그리며 설계했습니다. 매번 같은 문제점느껴서 한 번 개선하는 겸 작성했습니다. 🥔 : 글쓴이 🟧 시간이 부족해지는 설계 베로와 excaildraw 사이트에서 설계를 진행했다. 세 번의 미션을 진행하면서 항상 그림을 그렸었고 이번에도 마찬가지였다. 그리고 세 번 다 시간이 부족했다. (😕 흠) 문제를 해결하기 위해 기본적인 것을 분석해보려고 한다. 그림으로 설계할 때 장단점이 뭐였는가 ? 어떤 식으로 진행되었는가 ? 나의 목적은 무엇이었고 그것을 이뤘는가 ? 🥔 : 장점이 무엇이..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 49 - 매개변수가 유효한지 검사하라

Item 49 매개변수가 유효한지 검사하라 메서드나 생성자에 입력되는 매개변수들이 정상적인 데이터인지 검사하는 것은 중요합니다. 매개변수 검사를 제대로 하지 않는다면 다음과 같은 결과가 발생할 수 있습니다. 예상치 못한 동작이 발생할 수 있다. 잘못된 결과를 반환할 수 있다. 예외를 던지면서 애플리케이션 동작이 중단된다. 잘못될 수 있는 상황들을 예시로 보겠습니다. 🟧 예상치 못한 동작이 발생할 수 있다. 메서드는 정상적으로 실행됐으나 다른 객체를 잘못된 상태로 바꿔놓을 수 있습니다. Deck에서 카드를 뽑을 때 문제 없이 카드를 가져와야 정상적인 동작입니다. 하지만 덱을 생성할 때 빈 컬렉션이 매개변수로 들어갔습니다. Deck deck = new Deck(initData()); 아무런 문제가 없다고 생..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 32 - 제네릭과 가변인수를 함께 쓸 때는 신중하라

 Item 32 제네릭과 가변인수를 함께 쓸 때는 신중하라 🟧 가변인수 (Varargs) 가변인수는 필요에 따라 매개변수의 개수를 동적으로 조정할 수 있는 기능입니다. 덕분에 varargs 메서드를 n번 오버로딩 하지않아도 됩니다. 가변인수 사용하는 방법은 타입... 매개변수명 으로 사용하면 됩니다. 가변인수는 파라미터로 넘겨진 값들을 컴파일러가 컴파일 타임에 배열을 만들어 처리해주는 방식입니다. 🟧 제네릭과 가변인수 위에서 요구사항이 들어왔습니다. "같은 타입의 데이터를 List로 반환하는 메서드를 만들어라." 기존에 만들어져 있는 Collection의 Api를 이용해도 되겠지만 직접 차근차근 구현 해보면서 제네릭과 가변인수를 사용하게 되는 과정을 보겠습니다. 버전 01. asListV1 버전 02...

👨‍🚀 우아한테크코스 5기

[20230225] 우아한 테크코스 5기 LEVEL 1 - 사다리 타기 1단계 & 2단계 회고

안녕하세요 ~ 헤나입니다! 😁 저번에는 [20230217] 우아한 테크코스 5기 LEVEL 1 - 사다리 생성 페어 회고를 작성했고 이번에는 "사다리 생성 1단계 & 2단계" 회고를 진행해보려고 합니다. 😊 : 리뷰어 🥔 : 글쓴이 💡 TDD 사다리 미션을 진행하면서 목표를 잡았던 것은 "TDD로 끝까지 진행"하기입니다. 다음과 같이 생각해야 할 순간들이 있었습니다. 테스트 작성 순서 테스트 작성 이전 설계 A 객체 테스트를 위한 B 객체 생성 및 테스트 코드 리팩터링 타이밍 리팩터링은 어느 수준까지 저는 다음과 같은 순서로 TDD를 진행했습니다. "객체 생성 예외 테스트 -> 객체 생성 성공 테스트 -> 기능 예외 테스트 -> 기능 성공 테스트 -> 리팩터링" 테스트 순서에 정답은 없습니다. 그래도 한..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 26 - Raw Type은 사용하지 말라

Item 26 Raw Type을 사용하지 말라. ✅ Raw Type? Raw Type은 제네릭 타입에서 타입 파라미터를 사용하지 않은 때를 의미합니다. 오라클 공식 문서를 보면 다음과 같이 기재되어 있습니다. 4.8. Raw Types To facilitate interfacing with non-generic legacy code, it is possible to use as a type the erasure (§4.6) of a parameterized type (§4.5) or the erasure of an array type (§10.1) whose element type is a parameterized type. Such a type is called a raw type. 제네릭을 사용하지 ..

hyena0608
'분류 전체보기' 카테고리의 글 목록 (6 Page)