일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바로 만들수 있는 것
- 백준
- 테스트 성능 개선
- Getter Setter
- 객체지향적인 설계
- 상수와 Enum
- 제임스고슬링
- There isn't anything to compare.
- 자바 4334
- 우아한테크코스
- 자바 버전 다운 그레이드
- throw 와 throws 차이
- 자판기미션
- ServiceTest
- PR 오류
- 윤년계산하기
- 자바의 종류
- ControllerTest
- JDK
- java 1000번 A+B
- 프로젝트 패키지 구조
- 우테코
- JXM
- 상근날드
- 우테코4기
- 방어적 복사
- 인수테스트
- Oracle JDK와 OpenJDK의 차이
- 블랙잭 회고
- 리스코프치환원칙
- Today
- Total
목록분류 전체보기 (36)
개발새발

안녕 안녕하세요. 터놓고 팀 수달입니다. ☺️ 방학 맞이 뒷공부 중에 공유하고 싶은 내용이 생겨서 글을 작성하고 있습니다. 이번 레벨3 QA 를 할 때, 작은 변경 사항에도 기존 로직에 영향이 가지 않는지 확인하기 위해서 계속 테스트를 돌려보곤 했는데, 매번 1분 가까이 걸리는 것을 보면서 답답했어요. 그래서 테스트 코드 최적화를 해야겠다고 생각하고, 현재 저희 팀 코드의 문제점을 생각해보았습니다. 테스트 격리 방식의 문제점 첫번째 먼저 테스트 격리를 해야하는 이유를 간단하게 얘기할게요. 같은 데이터를 공유해서 사용하게 된다면 테스트는 실행 순서에 따라 성공과 실패 여부가 결정될 수 있어요. (운으로 테스트가 성공한다는 그런 뜻이죠☺️) 이렇게 된다면 실패 원인이 비지니스 로직에 있는지, 데이터에 있는지..
들어가며 이 글을 오브젝트 내용을 기반하여 제 생각을 작성한 글입니다! 지금까지 지금까지 저는 레벨 1,2 에서 객체에 메세지를 보내는 법을 배웠으나, Spring 과 Spring data jpa 를 만나 무너졌어요. 😢 알고 있는 지식과 새로 습득한 지식을 새롭게 가공하는 일은 에너지가 많이 드는데, 그 과정을 세세히 하기에 레벨3는 너무나 바쁘고 치열했습니다. (라고 쓰고 변명이라고 읽는다) 그래서 레벨3는 최초의 기획한 요구사항에 맞춰 동작 가능하게 하기 + 체화 되어 있던 수준만큼만 객체지향적이게 작성하기 를 목표로 설정하고 달려왔어요. 객체, 설계.. 너희 너무 어려워 큰 프로젝트 경험이 없다면, 유지보수하기 좋은 코드를 작성해야하는 이유를 절실히 느끼지 못하는 것 같아요. 마치 체력이 꺽여야만..
작성 이유 한참을 작업한 후, PR을 날리려고 했는데, There isn't anything to compare 이라는 문구를 마주쳤다. 분명 기존 레포지토리를 fork 한 후, 작업을 하고 push 했고, commit 내역도 있는데 왜 그랬지 ? PR 이란? PR이란, Pull Request의 약자로, 기존 깃허브 저장소에 보관된 코드 베이스에서 내 작업으로 인해 생긴 변경사항들, 즉 코드 라인들의 추가와 삭제를 코드 베이스에 포함시켜달라고 보내는 요청이다. 원인 기존 레포지토리를 포크 한 후, 다른 레포를 upsteam 브런치로 등록하여 -> fetch / rebase 를 받았었다. (기존 체스 미션 코드를 가져오려고)그랬더니 upsteam 브런치의 commit 내역이 PR 을 요청할 레포의 comm..

JDBC 학습 동기 데이터가 보존 가능한 web 프로그램을 만드려고 하다 보니, web 과 DB를 연동해야 했다. 연동하는 방법 중 하나인 JDBC 를 사용하라는 요구사항이 있었고, 따라서 학습하게 되었다. JDBC ( Java database connectivity)란? 자바 프로그램 내에서 데이터 베이스 sql 문을 실행하기 위한 자바 API 이다. JDBC 를 사용해서 DB 연결 하는 과정 연결에 필요한 정보 추가 DriverManager 를 사용하여 Connection 얻어오기 얻어온 Connenction 과 PreparedStatement 를 사용하여 sql 문 시행시키기 PreparedStatement 란? Sql injection 을 방어하기 위한 방법이다. sql 문을 받아서 단지 실행만 ..

학습 동기 아래와 같이, 명령어에 따라 다른 행위를 구현할 때가 있다. 이런 코드는 명령어가 많아지면 조건문이 늘어나고, 가독성도 떨어진다. 또한 작업 요청과 처리를 한 클래스 내에서 해야한다. 이렇게 하면 객체에 과한 책임을 지게 하는게 아닌가? (과거 카페에서 주문 받고 제조까지 혼자 다 한 경험이 있었는데,, 무지 힘들었다) 이 상황에 커멘드 패턴을 적용해보자! 커멘드 패턴이란? 작업 요청과 처리를 분리하는 방법 중 하나이다. 아래 예시를 보면 연결해줘 라는 작업 요청을 받고, 어떤 기계에 연결할지는 처리 담당에서 결정한다. 위에 체스 미션 요청 처리를 커멘드 패턴으로 변경해보자. 커멘드 패턴에서 사용되는 개념 ① 클라이언트 (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..