본문 바로가기
카테고리 없음

TIL 230217

by hbIncoding 2023. 2. 17.

Spring  심화 주차6일차

0. Java 스킬 향상

  • set.add()의 return 은 true/false 이다
    • ex) set에 원소 1,2,3이 들어있을 때 set.add(4)는 true , set.add(3)은 false 를 반환한다.
  • str.split 을 사용할 때 눈에 보이는 문자 뿐만 아니라 공백도 잘 사용하자
    • str.splot(" , ") 과 같이 공백쉼표공백 또 가능하다는 것을 인지하자
  • Stack 선언과 간단한 사용 메서드
Stack<Integer[]> stack = new Stack<>();

for (int i : progresses) {
    stack.push(i);
}

stack.pop();		//제일 최근 값을 제거, 제거하면서 출력 등 확인 사용 가능
stack.peek();		//가장 최근에 들어간 값을 출력
stack.search(3);	//3의 인덱스를 출력해준다
stack.empty();		//비어있으면 True 반환

1. 숙련주차 시험 문제 풀이

  • Spring에서 ERD 확인하는 방법
    • shift 2번
    • persistence 검색 
    • 더블클릭하여 좌측에 Persistence 탭이 생긴것을 확인
    • 들어가서 entityManagerFactory 우클릭하여 첫번 째 항목으로 확인

 1) 1차

  • @ManytoOne 사용 시 JoinColumn 자동 생성
    • ex) JoinColumn(name = "bookstore_id")인것과 똑같이 지어준다. "걸어주는 객체의 필드명_PK)"
  • @JoinColumn 옵션
    • length : 최초 255자( 1byte) 길어지면 에러가 난다)
    • Columndefinition : 자료형이 다양하다 date, text(최대 2byte 저장 가능 > length 문제 해결) , block, 등등이 있다.
    • nullable : null이 가능한지 아닌지
    • unique : 중복값에 대한 처리를 어떻게 하는지

 2) 2차

  • @OnetoMany(mappedby= " 관리 주체 entitiy에서 feild명 하나를 가져와서 입력")
    • mappedby 옵션은 뒤에 many가 오는 것에만 달릴 수 있다. 
    • mappedby 옵션 생량 시 Join 테이블을 만들어서 관리가 된다.(단순히 양쪽의 pk값만 가지고 있기에 관리가 어렵다) > 어느 테이블에서 관리할 지 정해주어야 한다.
  •  

 3) 3차 ( ManyToOne을 사용해야하는 이유)

  • @OnetoMany에서 @JoinColumn(name = "")을 안주어주었을 때 중간 테이블이 생성될 때가 있다.
    • 중간 테이블 해소를 위해 @JoinColumn을 지정해줘야할 수 도 있다.
  • @onetoMany와 ManytoOne의 차이점 : 어느테이블에서 PK를 관리 하냐의 차이다. 하지만 아래 단점으로 인해 ManytoOne을 지향한다.
    • 엔티티가 관리하는 외래키가 다른 테이블에 있다.
    • 연관관계 관리를 위해 추가로 UPDATE SQL 이 실행 된다.

 4) 4차

  • manytomany 가 아닌 oneot many 2개를 이용하고 중간 테이블(엔티티)을 이용해 간접적으로 다대다를 구현하는 방식을 지향한다.

 

2. Spring 기능 

 1) @Builder 

  • 빌더 패턴을 사용해야 하는 이유
    • 가독성이 좋아진다
    • 어떤 값을 먼저 설정하던 상관없다.
    • 아래 예시를 통해 Builder패턴의 유용성을 알 수 있다.
  • 빌더 패턴을 적용할 객체에 @Builder 어노테이션만 달아주면 자동으로 사용 가능하다.
Bag bag = new Bag("name", 1000, "memo", "abc", "what", "is", "it", "?");

@Builder
public Bag(String name, int money, String memo) {
	this.name = name;
    	this.money = money;
    	this.memo = memo;
}

Bag bag = Bag.builder()
		.name("name")
        	.money(1000)
        	.memo("memo")
            	.letter("This is the letter")
            	.box("This is the box")
        	.build();
            

Bag bag = Bag.builder()
		.name("name")
        	.memo("memo")	// memo를 money 대신 먼저!
        	.money(1000)
        	.build();

3. 참고자료

 1)빌터패턴과 @Builder : https://pamyferret.tistory.com/67

 

빌더 패턴(Builder pattern)을 써야하는 이유, @Builder

빌더 패턴(Builder pattern)이란? 객체를 정의하고 그 객체를 생성할 때 보통 생성자를 통해 생성하는 것을 생각한다. Bag bag = new Bag("name", 1000, "memo"); 하지만 생성자를 통해 객체를 생성하는데 몇 가

pamyferret.tistory.com