일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JDK
- Oracle JDK와 OpenJDK의 차이
- 윤년계산하기
- throw 와 throws 차이
- 블랙잭 회고
- 우아한테크코스
- ServiceTest
- PR 오류
- There isn't anything to compare.
- JXM
- java 1000번 A+B
- 객체지향적인 설계
- 우테코4기
- 자바 버전 다운 그레이드
- 인수테스트
- 자바로 만들수 있는 것
- 자바 4334
- 상근날드
- 백준
- 자판기미션
- 프로젝트 패키지 구조
- Getter Setter
- 제임스고슬링
- ControllerTest
- 테스트 성능 개선
- 상수와 Enum
- 자바의 종류
- 우테코
- 방어적 복사
- 리스코프치환원칙
- Today
- Total
목록우아한테크코스 (18)
개발새발
방어적 복사란? 객체에 값을 대입할 때, 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 클래스에 이를 처리해주는 메서드가 있는데 한번 참고해보시면 좋을 것 같아요!!! 이번 기회에 타입 캐스팅과 오버플로우에 대해서 공부해보고자 한다. 형변환이란? 큰 범위 -> 작은 범위로 하는 다운캐스팅과 작은 범위 -> 큰 범위로 하는 업캐스팅이 있다. 변수 저장 가능 범위 ..
리스코프 치환원칙은 상속에 대해 공부하다가 알게 되었다. 개념 부모 클래스의 인스턴스를 사용하는 위치에 자식 클래스의 인스턴스를 대신 사용했을 때, 코드가 원래 의도대로 작동해야한다. 리모컨 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 class 리모컨 { boolean power; void 켜기(){ power = true; } void 끄기(){ power = false; } } cs 이제 이걸 상속받은 TV 리모컨, 에어컨 리모컨 이 있다고 하자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Tv_리모컨 extends 리모컨 { boolean power; void 켜기(){ power = true; } void 끄기(){ power = false; } v..
지금 이 글은 장덕철의 [그날처럼] 을 들으며 작성하고 있다. 이번 미션은 우아한 테크코스에 들어와서 처음으로 했던 미션이라 모든게 처음이었다. 크게 했던 일을 정리해보면 1) 한가지 주제로 페어 프로그래밍을 해야했고, 2) 내 의견을 말로 전달해야했고, 3) 리뷰어에게 피드백을 받고 리팩토링을 해야했다. 그동안 해보지 않았던 것들 투성이라서 굉장히 서툴었던 것 같다. 그래서 데일리 조에 속한 팀원들의 코드를 살펴보며 참고할 소스도 많이 얻고, 궁금한게 있으면 많이 물어봤다. 대화를 통한 메타 인지 그동안 코드를 짜면서 의식없이 작성했던 부분을 크루들의 질문에 대답하지 못하면서 "아 이건 내가 확실하게 아는 부분이 아니구나" 깨닫곤 했다. 이렇게 공부할 소스를 얻고 모르는 부분을 찾아보고 정리하면 하루가..

프로젝트 패키지 구조 어떻게 설계 해야 할까? 프로젝트를 시작하면 제일 처음 드는 고민이 패키지를 어떻게 가져가야 하는가? 인 것 같다. 현재까지 패키지 구조의 장 단점을 명확하게 느낄 수 있는 계기가 없어 나만의 명확한 분류 기준은 없지만, 여러가지 패키지 구조를 직접 설계해보며 조금이나마 기준을 세워보고자 한다. 계층형 아키텍쳐 이번 프로젝트에서 사용했던 구조는 계층형이었다. UI/ 비지니스 모델을 분리하라는 조건에 맞추기 위해서 관심사 별로 레이어를 나눠서 구현하는 것이 좋겠다고 판단했다. 웹 계층에서 대표적인 계층형 아키텍처는 MVC 이기 때문에 MVC 패턴을 적용시켰다. MVC 패턴을 사용하면 Model과 View가 다른 컴포넌트들에 종속되지 않아 변경에 유리하다는 장점을 가질 수 있다. MVC..

Enum 클래스를 사용하기 전 Enum 타입의 클래스가 있다는 것은 알고 있었지만, 막상 활용해본 적은 없었다. 그런데 고정 클래스로 Enum type 의 클래스로 Coin 이 있는게 아닌가??? 왜 static final 상수로 고정하지 않고 amount 를 return 받도록 했을까? 유추 해봤다. 동전 타입을 고정 시키기 위해 요구조건을 보면 500원, 100원, 50원, 10원만 사용이 가능하게 해두었다. 이번 미션에서 코인 타입별 갯수를 관리하기 위해 CoinType 이라는 클래스를 만들었다. 만약 Coin 이 그냥 상수였다면 여기서 코인 타입을 300원 으로 넣어도 생성될 것이다. public class CoinType { private final int type; // 아무 숫자나 다 들어올..