일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 내일배움캠프
- 환급챌린지
- 내일배움카드
- OPENPATH
- Be
- baekjoon
- 국비지원
- 부트캠프
- 객체지향
- 패스트캠퍼스
- 오픈챌린지
- 백엔드
- 국비지원취업
- 오블완
- 백엔드개발자
- UXUI챌린지
- 디자인교육
- 국비지원교육
- Spring
- UXUI기초정복
- 디자인챌린지
- KDT
- 백준
- 티스토리챌린지
- 디자인강의
- UXUIPrimary
- Java
- mysql
- 오픈패스
- 백엔드 부트캠프
- Today
- Total
목록Java (20)
군만두의 IT 공부 일지

목차14장. 멀티 스레드14.6 스레드 동기화멀티 스레드는 하나의 객체를 공유해서 작업할 수 있다.하지만 다른 스레드에 의해 객체 내부 데이터가 쉽게 변경될 수 있기 때문에 의도했던 것과는 다른 결과가 나올 수 있다.위 사진에서 UserThread에 저장된 데이터가 날아간다.스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없도록 스레드 작업이 끝날 때까지 객체에 잠금을 건다.객체 내부에 동기화(synchronized) 메소드와 블록이 여러 개 있다면 스레드가 이 중 하나를 실행할 때, 다른 스레드는 일반 메소드는 실행 가능하지만 해당 메소드와 다른 동기화 메소드 및 블록을 실행할 수 없다.동기화 메소드 및 블록 선언동기화 메소드를 선언하려면 synchronized 키워드를 인스턴스나 정적 메소드에 붙..
목차13장. 제네릭13.1 제네릭이란?Box 클래스에 넣을 내용물을 content 필드라고 선언하려고 할 때, 타입을 무엇으로 해야 할까?public class Box { public Object content;}Box box = new Box();box.content = 모든 객체;Box는 다양한 내용물을 저장해야 하므로 특정 클래스 타입으로 선언할 수 없기 때문에, Object 타입으로 선언한다. 모든 객체는 부모 타입인 Object로 자동 타입 변환이 되므로, content 필드에는 어떤 객체든 대입이 가능하다.Object 타입: 모든 클래스의 최상위 부모 클래스문제: Box 안의 내용물을 얻을 때, 어떤 객체가 대입되어 있는지 확실하지 않다. instanceof 연산자로 모든 종류의 클래스를..
목차9장. 중첩 선언과 익명 객체9.1 중첩 클래스중첩 클래스(Nested Class): 클래스 내부에 선언한 클래스장점: 클래스의 멤버를 쉽게 사용할 수 있고, 외부에는 중첩 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.중첩 클래스는 선언하는 위치에 따라 두 가지로 분류된다.멤버 클래스: 클래스의 멤버로서 선언되는 중첩 클래스로컬 클래스: 메소드 내부에서 선언되는 중첩 클래스선언 위치에 따른 분류선언 위치객체 생성 조건멤버 클래스인스턴스 멤버 클래스class A { class B { ... }}A 객체를 생성하야만B 객체를 생성할 수 있음정적 멤버 클래스class A { static class B { ... }}A 객체를 생성하지 않아도B 객체를 생성할 수 있음로컬 클래스class A..
목차 드디어 이 책을 마무리하게 되었다. 여기서는 테스트를 SOLID 법칙에 따라 어떻게 설계하는지 설명한다. 책을 읽으면서 SRP에서는 실제 프로젝트에서 팀원이 튜터님한테 Repository 의존성을 많이 주입받고 있다고 지적받은 상황이 떠올랐다. 이런 부분을 유의해야 할 것 같다.16 . 테스트와 설계테스트와 소프트웨어 설계가 추구하는 가치에 교집합이 있다. 좋은 설계는 시스템이 모듈로 분해되고 각 모듈이 독립적으로 개발될 수 있게 하는 것을 추구한다. 더 나아가 시스템이 확장될 수 있는 것을 추구한다. 좋은 설계를 갖춘 코드는 대부분 테스트하기도 쉽다.테스트와 좋은 설계1. 테스트하기 어려운 코드는 좋은 설계 원칙을 적용함으로써 테스트하기 쉽게 만들 수 있다.2. 어떤 방식이 좋은 설계인지 헷갈린..

오늘은 Store의 CRUD 기능을 구현한 내용에 대해서 Store, StoreRepository, StoreService, StoreController 클래스 코드를 팀원에게 코드 리뷰를 받았다. 코드 리뷰의 목적은 서로 코드를 어떻게 구현했는지 확인하고, 개선할 부분을 조언해주기 위함이다.Store 엔티티의 변경 사항주소 정보 임베딩: 공통적으로 사용되는 Address 클래스를 임베드 타입으로 적용하여, 관리의 일관성을 높였다.유효성 검증 로직 강화: 필드별로 유효성 검증 로직을 추가하여 데이터의 정확성을 보장했다. 특히 수정 작업 시 null 값이 입력되지 않도록 했다.Setter 메소드 제거: 데이터 무결성을 위해 @Setter 애너테이션의 사용하지 않고, 필요한 값 변경은 생성자와 메소드를 통해..

주문 관리 플랫폼 프로젝트에서 Store의 CRUD 기능을 담당하여 구현했다. 구현한 코드와 개발 초기에 팀원들과의 의논한 사항들을 정리하려고 한다.@RestController@RequiredArgsConstructor@RequestMapping("/api/v1/stores")public class StoreController { private final StoreService storeService; // 새로운 가게 생성 @PostMapping public ResponseEntity createStore(@RequestBody StoreRequestDto storeRequestDto) { Store store = storeService.createStore(store..
목차 오늘은 8장 인터페이스에 대해서 정리하려고 합니다. 상수에 필드에 대해서 몰랐던 내용을 알게 된 것 같습니다.8장. 인터페이스8.1 인터페이스의 역할인터페이스(interface): 두 장치를 연결하는 접속기인터페이스는 두 객체를 연결하는 역할을 함.상속보다 인터페이스를 이용해서 다형성을 구현하는 경우가 많음.8.2 인터페이스와 구현 클래스 선언인터페이스는 '*.java' 형태의 소스 파일로 작성되고 '*.class' 형태로 컴파일된다. 물리적 형태는 클래스와 동일하지만, 소스를 작성할 때 선언하는 방법과 구성 멤버가 클래스와 다르다.인터페이스 선언class 키워드 대신 interface 키워드를 사용함.접근 제한자는 dafault, public를 붙일 수 있음.중괄호 안에는 상수 필드, 추상 메소드..

오늘은 어제 작성한 S.A의 피드백을 바탕으로 본격적인 개발을 시작한다. 먼저 Git Repository를 하나 생성해서 스프링 프로젝트 초기 설정을 마쳤다. 그 과정에서 commit, branch, issues, pr 컨벤션을 정하고 Slack 팀 채널을 하나 생성하는 등 사전에 정해야 하는 것들을 정하고 시작했다.Git & PR 특강Github를 처음 사용하는 분들도 있어서 그런지, 튜터님이 Git 관련 특강을 진행해주셨다. 내용은 Github로 협업을 해본 사람이라면 대부분 아는 내용이었는데, 주요 내용은 다음과 같다.1. 브랜치 명과 커밋 메시지의 좋은 예커밋 메시지는 '커밋 컨벤션' 키워드로 구글링에 하면 나오는 기본적인 내용들이었다. 우리 조는 아래처럼 정했다. 그리고 브랜치는 git-flo..