| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- PR 오류
- 블랙잭 회고
- 객체지향적인 설계
- 방어적 복사
- 자바로 만들수 있는 것
- 자바 4334
- 자바 버전 다운 그레이드
- 상근날드
- 자바의 종류
- 리스코프치환원칙
- JXM
- 우테코4기
- 백준
- 우아한테크코스
- 우테코
- ControllerTest
- 자판기미션
- ServiceTest
- 프로젝트 패키지 구조
- java 1000번 A+B
- 제임스고슬링
- 테스트 성능 개선
- 상수와 Enum
- JDK
- throw 와 throws 차이
- There isn't anything to compare.
- Getter Setter
- 윤년계산하기
- Oracle JDK와 OpenJDK의 차이
- 인수테스트
- Today
- Total
목록전체 글 (36)
개발새발
방어적 복사란? 객체에 값을 대입할 때, 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) 리뷰어에게 피드백을 받고 리팩토링을 해야했다. 그동안 해보지 않았던 것들 투성이라서 굉장히 서툴었던 것 같다. 그래서 데일리 조에 속한 팀원들의 코드를 살펴보며 참고할 소스도 많이 얻고, 궁금한게 있으면 많이 물어봤다. 대화를 통한 메타 인지 그동안 코드를 짜면서 의식없이 작성했던 부분을 크루들의 질문에 대답하지 못하면서 "아 이건 내가 확실하게 아는 부분이 아니구나" 깨닫곤 했다. 이렇게 공부할 소스를 얻고 모르는 부분을 찾아보고 정리하면 하루가..
String.split() 의 비밀 자동차 이름 예외처리를 하다가 "pobi, jun," 처럼 문자의 제일 끝에 ,가 오는 경우에 예외처리를 해줘야 할 것 같았는데, 예외 처리를 하지 않아도 동작에 이상이 없는것이 이상했다. 그래서 알아보기로 했다. String.split() 의 동작 원리 평소 사용하던 split() 내부를 보니 , limit 기본이 0 으로 설정되어 있었다. split 에 있는 limit의 3가지 역할 생각보다 limit 는 많은 역할을 하고 있었다. limit 0 이면 맨뒤에 부터 문자가 1이상 전까지 공백이 제거됨. (그래서 "pobi, jun,,".split(",") 일 때 배열 크기가 2 였음. ) limit 음수면 공백 포함됨 limit 양수면 공백 포함, 크기가 limit만..
Private 로는 데이터를 지키기에 부족한걸까? 맨 처음 객체 지향에 대해 배울 때, 데이터를 다른 곳에서 변경하지 못하도록 접근 제어자를 private 로 두고, getter / setter 를 사용하라고 배웠다. 그런데 이번 요구사항에 최대한 setter 를 쓰지 않고 해보라 는 의문의 메시지가 있었다.. ! 😲😲 왜 그렇게 해야할까? 객체 지향 프로그래밍의 본질 객체 상태를 보호하기 위해 외부에 노출되는 정보를 줄이고, 다른 객체와 메세지를 주고받아 협력하는 것 이라고 생각한다. 여기서 핵심 키워드는 노출되는 정보를 줄임 과 메세지로 협력 이다. setter 를 사용하게되면 클래스 외부에서 내부를 수정하게 되니, 객체를 보호하는 것에 멀어지고, getter 를 사용하게되면 정보를 노출한다. 캡슐화..