728x90

개발 288

[Java] Map안에 Map 안에 List 만들기

회사에서 Java, Spring Boot, Thymeleaf로 작업하고 있다.화면에 테이블을 그리는데, (A, B 영역 / ㄱ, ㄴ, ㄷ 교재 / 1, 2 유닛)Aㄱ12ㄴ1Bㄷ11이런 식으로 그려줘야 했다.Javascript로 할 수도 있었지만, 최대한 로직을 Java쪽에서 만들어주기로 했기 때문에 Map>> 이러한 형태로 만들어서 화면에서 그릴 생각이었다.// 화면으로 보낼 최종 맵Map>> resultMap = new LinkedHashMap();// 임시 맵Map> tempMap = new LinkedHashMap();// 전체 데이터List studyDto = xxxService.findStudyByUserId(userId);맵을 먼저 만들어 놓고 전체 데이터에서 맵에 넣어줄 생각이다.// 영역 ..

[JPA] 프록시와 연관관계 관리

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 프록시 - Member에 프로퍼티로 Team을 가지고 있을 때 em.find로 member을 조회하면 쿼리로 member와 team을 같이 조회한다. - team은 사용하지 않을 것이고 member의 username만 사용한다면 굳이 team을 조회할 필요가 없다. - 필요할 때 조회하기 위해 프록시를 사용한다. 2. 프록시 기초 - em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 - em.getReference(): 데이터 조회를 미루는 가짜(프록시) 엔티티 객체 조회(DB로 쿼리를 날리지 않고 파라미터로 넣어준 클래스를 상속받은 가짜(프록시) 엔티티를 만들어서 프록시 객체가 영속성 컨텍스트에 들어간다.) 3. 프록시 ..

[Go] 기초 - 익명함수

1. 익명함수 - 함수명을 갖지 않는 함수 - 일반적으로 익명함수는 그 함수 전체를 변수에 할당하거나 다른 함수의 파라미터에 직접 정의되어 사용 func main() { sum := func(n ...int) int { //익명함수 정의 s := 0 for _, i := range n { s += i } return s } result := sum(1, 2, 3, 4, 5) //익명함수 호출 println(result) } - Go로 개발하면서 익명함수는 거의 사용을 안했던 것 같다. 2. 일급함수 - Go 프로그래밍 언어에서 함수는 일급함수로서 Go의 기본 타입과 동일하게 취급되며, 따라서 다른 함수의 파라미터로 전달하거나 다른 함수의 리턴값으로도 사용될 수 있다. 즉, 함수의 입력 파라미터나 리턴 파..

개발/Go 2022.07.18

[JPA] 고급 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 상속관계 매핑 - 관계형 데이터베이스는 상속 관계 X - 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 - 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 - 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 (1) 각각 테이블로 변환 -> 조인 전략 (2) 통합 테이블로 변환 -> 단일 테이블 전략 (3) 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 2. 조인 전략 - 장점 (1) 테이블 정규화 (2) 외래 키 참조 무결성 제약조건 활용가능 (3) 저장공간 효율화 - 단점 (1) 조회 시 조인을 많이 사용, 성능 저하 (2) 조회 쿼리가 복잡함 (3) 데이터 저장 시 IN..

[Go] 기초 - 함수

1. 함수 - Go에서 함수는 func 키워드와 함수명을 사용해서 정의한다. - Java의 메소드와 비슷하다. - 함수명 뒤에 괄호 안에 받을 파라미터를 적는데, 파라미터명 + 타입 순서로 적어준다. func main() { msg := "Hello" say(msg) } func say(msg string) { println(msg) } - msg에 "Hello"를 담아 say함수에 전달했고, say함수에서 msg(string)로 받아서 출력했다. 2. 파라미터 전달 방식 - Go에서 파라미터를 전달하는 방식은 Pass By Value와 Pass By Reference로 나뉜다. (1) Pass By Value 위의 [1. 함수]의 예제에서는 msg의 값 "Hello" 문자열이 복사되어 함수 say()에..

개발/Go 2022.07.17

[Go] 기초 - 반복문

1. for - Go는 반복문에서도 괄호는 쓰지 않는다. - while 반복문이 없다. func main() { sum := 0 for i := 1; i 90 { // break //} } println(n) } - 무한 루프는 조건을 다 없애고 for만 써준다. func main() { for { println("Infinite loop") } } 2. for range - for range 문은 for "인덱스,요소값 := range 컬렉션" 컬렉션에서 2개의 변수를 가져온다. - 변수를 사용 안할 경우 _로 처리한다. names := []string{"기억", "니은", "디귿"} for index, name := range names { println(index, name) // 0, 기억 // ..

개발/Go 2022.07.17

[Go] 기초 - 조건문

1. if - 조건문은 다른 언어와 비슷하다. - 괄호는 생략 - {는 꼭 조건과 같은 라인에 와야한다. - else 문도 꼭 }와 같은 라인이어야 한다. if k == 1 { println("One") } else if k == 2 { println("Two") } else { println("!") } 2. switch - 복수개의 case 값들이 있을 경우는 case 3,4 처럼 콤마를 써서 나열할 수 있다. - 다른 언어는 switch 키워드 뒤에 변수나 expression 반드시 두지만, Go는 이를 쓰지 않아도 된다. 이 경우 Go는 switch expression을 true로 생각하고 첫번째 case문으로 이동하여 검사한다. - 다른 언어의 case문은 break를 쓰지 않는 한 다음 cas..

개발/Go 2022.07.15

[Java] 트리

Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 10-1 트리 - 트리란? 데이터 사이의 계층 관계를 나타내는 자료구조 - 트리 관련 용어 트리는 노드와 가지로 구성 (1) 루트: 트리의 가장 윗부분에 위치하는 노드 (2) 리프: 트리의 가장 아랫부분에 위치하는 노드 (3) 안쪽 노드: 루트를 포함하여 리프를 제외한 노드 (4) 자식: 어떤 노드로부터 가지로 연결된 아래쪽 노드 (5) 부모: 어떤 노드에서 가지로 연결된 위쪽 노드 (6) 형제: 같은 부모를 가지는 노드 (7) 조상: 어떤 노드에서 가지로 연결된 위쪽 노드들 (8) 자손: 어떤 노드에서 가지로 연결된 아래쪽 노드들 (9) 레벨: 루트로부터 얼마나 떨어져 있는지에 대한 값 (10) 차수: 노드가 갖는 자식의 수 (11) 높이: ..

[JPA] 다양한 연관관계 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 연관관계 매핑시 고려사항 3가지 - 다중성 - 단방향, 양방향 - 연관관계의 주인 2. 다중성 - 다대일: @ManyToOne - 일대다: @OneToMany - 일대일: @OneToOne - 다대다: @ManyToMany -> 실무에서 사용 X 3. 단방향, 양방향 - 테이블 (1) 외래키 하나로 양쪽 조인 가능 (2) 사실 방향이라는 개념이 없음 - 객체 (1) 참조용 필드가 있는 쪽으로만 참조 가능 (2) 한쪽만 참조하면 단방향 (3) 양쪽이 서로 참조하면 양방향 - 연관관계의 주인 (1) 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 (2) 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 (3) 객체 양방향 관계는..

[Go] 기초 - 연산자

Go는 다른 언어에서와 비슷하게 산술연산자, 관계연산자, 논리연산자, Bitwise 연산자, 할당연산자, 포인터연산자 등을 지원한다. 1. 산술연산자 산술연산자는 사칙연산자(+, -, *, /, % (Modulus))와 증감연산자(++, --)를 사용한다. c = (a + b) / 5; i++; 2. 관계연산자 관계연산자는 서로의 크기를 비교하거나 동일함을 체크하는데 사용된다. a == b a != c a >= b 3. 논리연산자 논리연산자는 AND, OR, NOT을 표현하는데 사용된다. A && B A || !(C && B) 4. Bitwise 연산자 Bitwise 연산자는 비트단위 연산을 위해 사용되는데, 바이너리 AND, OR, XOR와 바이너리 쉬프트 연산자가 있다. c = (a & b)

개발/Go 2022.07.13
728x90