일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 제임스고슬링
- JXM
- 상수와 Enum
- 자판기미션
- Getter Setter
- 자바로 만들수 있는 것
- ServiceTest
- 블랙잭 회고
- 윤년계산하기
- There isn't anything to compare.
- JDK
- 리스코프치환원칙
- 자바 버전 다운 그레이드
- 상근날드
- 자바 4334
- 우아한테크코스
- PR 오류
- 인수테스트
- throw 와 throws 차이
- ControllerTest
- 객체지향적인 설계
- 자바의 종류
- 우테코
- 프로젝트 패키지 구조
- 백준
- java 1000번 A+B
- Oracle JDK와 OpenJDK의 차이
- 테스트 성능 개선
- 방어적 복사
- 우테코4기
- Today
- Total
목록우아한테크코스/level1 (10)
개발새발

학습 동기 아래와 같이, 명령어에 따라 다른 행위를 구현할 때가 있다. 이런 코드는 명령어가 많아지면 조건문이 늘어나고, 가독성도 떨어진다. 또한 작업 요청과 처리를 한 클래스 내에서 해야한다. 이렇게 하면 객체에 과한 책임을 지게 하는게 아닌가? (과거 카페에서 주문 받고 제조까지 혼자 다 한 경험이 있었는데,, 무지 힘들었다) 이 상황에 커멘드 패턴을 적용해보자! 커멘드 패턴이란? 작업 요청과 처리를 분리하는 방법 중 하나이다. 아래 예시를 보면 연결해줘 라는 작업 요청을 받고, 어떤 기계에 연결할지는 처리 담당에서 결정한다. 위에 체스 미션 요청 처리를 커멘드 패턴으로 변경해보자. 커멘드 패턴에서 사용되는 개념 ① 클라이언트 (Client) : 명령어를 입력받음 ② 커멘드 (Command) : 명령..
학습 동기 📝 리뷰어 분께서 데이터를 보호하기 위해서 방어적 복사를 사용해보는 것은 어떨까요? 라는 피드백을 주셨다. 관련 공부를 하다보니 방어적 복사, UnmodifiableList, copyOf 이 세가지 개념이 비슷한 구석이 있어 정리해보았다. 학습 내용 📖 세가지 개념에 대한 정리 내용은 링크로 대체한다. 방어적 복사란? unmodifiableList 란? List.copyOf 란? 방어적 복사 vs Unmodifiable vs copyOf 요약 방어적 복사 : 객체를 새로 생성해서 반환함, 원본에 대한 참조는 끊기지만,원본 내 또다른 객체들에 대한 참조는 유지됨. Unmodifiable : 읽기 전용으로 반환함. 원본과 참조는 유지 copyOf : 기존 값을 복사한 후 읽기 전용으로 반환함 원본..
방어적 복사에 대해 공부하다가 읽기 전용 List 를 반환하는 unmodifiableList 에 대해서 알게 되었다. 그리고 List.copyOf 또한 읽기 전용 List 를 반환한다는 것을 알게 되었다. 조금 더 자세히 파악해보자. public List getValue() { return List.copyOf(value); } 내부 구현 로직 내부 구현 로직을 살펴보니 unmodifiableList 와 똑같이 get 을 제외한 다른 메서드를 호출 할 경우 에러를 던지도록 구현했다. 차이점은 List 원본을 복사한 값을 읽기 전용으로 만든다. private ImmutableCollections() { } /** * The reciprocal of load factor. Given a number of e..
기본적으로 객체들은 참조로 연결되어 있기 때문에 반환한 객체를 수정하게 되면 원본도 수정된다. (ex) Google 공유 스프레드 시트) 의도하지 않은 수정을 막기 위해 방어적 복사에 대해서 찾아보다가 Collections에 있는 unmodifiableList 라는 메서드를 알게 되었다. 네이밍에서 알 수 있듯 수정이 불가한 List 를 만들어 반환하는 메서드인 듯 하다. public List getValue() { return Collections.unmodifiableList(value); } 내부 구현 로직 unmodifiableList 는 UnmodifiableCollection 을 상속 받아 만들어져 있고, get 메서드 외에 다른 메서드를 호출 할 경우 에러 를 던지도록 되어 있다. 즉, Li..
방어적 복사란? 객체에 값을 대입할 때, new 키워드를 사용하여 새로운 객체로 복사해주는 것을 의미한다. public Cards(List cards) { this.cards = new ArrayList(cards); } 이렇게 새로 객체를 생성할 경우, 내부 데이터 값만 복사되고 참조가 끊기게 되어 원본의 변경에 상관없이 초기 데이터를 안전하게 사용할 수 있다. 방어적 복사 시점 카드를 관리하는 도메인인 Cards 에서 카드가 1개 이상임이 보장되어야 하여 유효성 검사를 한다고 가정하자. public Cards(List cards) { if(validation(cards)) { throw new IllegalArgumentException("카드는 한장 이상이어야합니다."); } this.cards =..

새로운 인사이트 📝 이번 미션을 하며 느꼈던 점을 정리하고자 한다. 미션 내용은 제일 하단 링크로 대체한다. 1. 프로그램은 흐름이다. 🌊 리뷰 시스템을 하다보면, 타인이 내 코드를 읽거나, 내가 타인의 코드를 읽는게 빈번하다. 잘 읽히는 코드를 짜려면 어떻게 해야 할까? 위와 같이 스티치가 좋은 조언을 해주었다. 앞으로 실행 흐름을 정리 한 후, 그 내용이 잘 들어나게 코드를 작성해야겠다고 생각했다. 흐름을 따라가면 과정이 들어나게끔! 2. 나만의 공부 루틴을 만들자 🔕 어떤 날은 공부가 너무나 하기 싫고, 어떤 날은 너무 재밌다. 공부가 재밌는 날 아침에는 뭘 했나? 생각해보니 아무것도 안했더라. 아침 일찍 일어나 유튜브를 몇 번 보다 보면, 공부가 재미없게 느껴지는게 당연하다. 아침에 일어나서 무의..
구현 순서도 코딩 컨벤션이다 상수, 클래스 변수, 인스턴스 변수, 생성자, 메서드 순으로 작성한다. public class Car { private static final int INIT_POSITION = 0; private static int autoIncrease = 0; //상수 private int moveIndex; private int carNumber; private String carName; // 클래스 변수 private Lotto lotto; // 인스턴스 변수 public Car(int index, ...) { // 생성자 this.moveIndex = index; } public void move() { // 메서드 moveIndex++; } ... } IDE의 코드 자동 정렬 ..
개발을 하다보면, 타입에 대한 변환이 필요할 때가 있다. 이번 미션을 하면서도 아래와 같이 타입 캐스팅을 사용했다. 1 2 double result = gameResult.getBettingMoneyResult() * getBettingMoney(); addMoney((int) result); cs 그랬더니 아래와 같이 피드백이 왔다. long 타입을 int 타입으로 강제 변경하면 오버플로우에 대한 대응이 어렵게 됩니다!! Math 클래스에 이를 처리해주는 메서드가 있는데 한번 참고해보시면 좋을 것 같아요!!! 이번 기회에 타입 캐스팅과 오버플로우에 대해서 공부해보고자 한다. 형변환이란? 큰 범위 -> 작은 범위로 하는 다운캐스팅과 작은 범위 -> 큰 범위로 하는 업캐스팅이 있다. 변수 저장 가능 범위 ..