전체 글

꾸준하게
자바 ORM 표준 JPA 프로그래밍

연관관계 조인 전략에 대하여

컬렉션과 조인한다는 것은 데이터베이스 테이블로 보면 일대다 조인입니다. 컬렉션 즉시 로딩은 항상 외부 조인을 사용합니다. 이부분 설명에서 이해가 안되는 부분이 있었습니다. 회원 테이블과 팀 테이블을 조인할 때 회원 테이블의 외래 키에 not null 제약조건을 걸면 모든 회원은 팀에 소속되므로 항상 내부 조인이 가능합니다. 그럼 반대로 팀 테이블에서도 똑같이 제약조건 설정하면 되는거 아닌가? 생각이 듭니다. 결론적으로, 외래키는 항상 다 쪽에 있으므로 불가능 합니다. 그래서 팀 테이블에서 회원 테이블로 일대다 관계 조인할 때, 회원이 한 명도 없는 팀을 내부 조인하면 팀까지 조회되지 않는 문제가 발생합니다. 따라서 일대다 관계를 즉시로딩할 때 항상 외부 조인을 합니다. 그래야 모든 팀을 조회할 수 있습..

알고리즘

[백준] 6588번 파이썬 python

시간초과로 고생했다.. 에라토스테네스의 체 구현방법 꼭 숙지하자 import math import sys # 에라토스테네스의 체 == 주어진 범위 내의 소수 리스트 반환하는 효율적인 알고리즘 def sieve_of_eratosthenes(n): prime = [True for _ in range(n+1)] prime[0] = prime[1] = False for i in range(2, int(math.sqrt(n)) + 1): if prime[i] == True: for j in range(i*i, n+1, i): prime[j] = False return prime max_n = 1000000 prime_list = sieve_of_eratosthenes(max_n) while True: n = in..

알고리즘

[프로그래머스] 두 원사이의 정수 쌍/파이썬 python

분류: 구현 ## 틀린 코드 import math def solution(r1, r2): answer = 0 answer += (r2-r1+1)*4 cnt = 0 for i in range(1, r2): for j in range(math.ceil(math.sqrt(r1**(2) - i**(2))),int(math.sqrt((r2**(2) - i**(2))))+1): if j == 0: continue cnt += 1 cnt *= 4 answer = answer + cnt return answer x,y축과 그 사이 점들을 따로 분리해서 구하려고 하였음 - x,y축에 있는 점 갯수 - 1~(r2-1)사이에 있는 점 갯수 x 4 이런식으로 로직을 짰는데 테스트코드에서는 맞았지만 제출 시 런타임 에러.. 일..

알고리즘

[백준] 11726번 파이썬 python

분류 : DP f(n-1)에서 세로 1개씩 붙이는 것과 f(n-2)에서 가로 2개 붙이는 경우를 합하면 된다!

알고리즘

[프로그래머스] 요격 시스템 (파이썬 python)

파란색이 end 지점이 갱신되는 곳임 def solution(targets): targets.sort(key = lambda x: x[0]) end = targets[0][1] answer = 1 for s,e in targets[1:]: if s >= end: answer += 1 end = e else: if e < end: end = e return answer 최단 경로를 구하는 것이 아니므로 BFS는 이 문제 풀이에 맞지 않다..

객체지향의 사실과 오해 스터디

[객체지향의 사실과 오해] Chapter 7

함께 모으기 객체지향 세 가지 상호 연관된 관점 개념 관점 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현함 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심 명세 관점 도메인 영역을 벗어나 소프트웨어로 초점이 옮겨짐 객체들의 책임에 초점을 맞춤 객체가 협력을 위해 '무엇'을 할 수 있는가에 초점 구현 관점 실제 작업을 수행하는 코드와 연관됨 객체의 책임을 '어떻게' 수행할 것인가에 초점 개념 -> 명세 -> 구현 관점 순서대로 소프트웨어 개발이 아님!(x) 세 가지 다른 방향에서 바라보는 것을 의미함 동시에 세 가지 관점을 쉽게 식별할 수 있어야 함 다음 간단한 예시로 두가지 목표를 달성할 것 도메인 모델에서 시작해서 최종 코드까지의 구현 과정 간략히 구현 클래스를 개념 관점, 명..

객체지향의 사실과 오해 스터디

[객체지향의 사실과 오해] Chapter 6

객체 지도 길을 모른다고 가정할 때, 길을 물어보는 방법 2가지 1. 길을 직접 알려주는 방법 : 가는 경로를 단계별로 상세히 설명함 -> 기능적이고 해결책 지향적인 접근법 2. 지도를 이용해 길을 찾는 방법 : 지도를 기반으로 설명 -> 구조적이고 문제 지향적인 접근법 지도는 범용적임 : 원하는 '기능'에 비해 지도에 표시된 '구조'가 더 안정적이므로 저자가 하고싶은 말 - 전통적인 소프트웨어 개발 방법 : 변경이 빈번히 발생하는 기능에 안정적인 구조를 종속시키는 길을 묻는 방법과 유사 - 객체지향 개발 방법 : 안정적인 구조에 변경이 빈번하게 발생하는 기능을 종속시키는 지도의 방법과 유사 이번장에서는 기능이 아니라 구조를 바탕으로 시스템을 분할하는 객체지향의 또 다른 측면에 관해 설명한다. 안정적인 ..

객체지향의 사실과 오해 스터디

[객체지향의 사실과 오해] Chapter 5

책임과 메시지 저자가 어떤 상황예시를 들려준다. 어떤 위급한 상황이 발생했을 때 단 둘이 있을 때와 여러명이 있을 때 책임감의 차이가 있다는 것이다. 여러명일 수록 책임감이 분산된다. 책임감이 분산될 수록 책임을 무시하려고 한다. 자신에게 명확한 책임이 없는 경우 타인의 책임으로 간주한다. 여기서 얘기하고자 하는 바는 훌륭한 객체지향 세계는 명확하게 정의된 역할과 책임을 지닌 객체들이 상호 협력하는 세계다. 자율적인 책임 설계의 품질을 좌우하는 책임 객체지향의 구성 기본 단위 == 자율적인 객체 만약, A 객체 요청 송신 -> B 객체 요청 수신 -> B 객체 행동 == 책임 적절한 책임의 선택 -> 전체 설계의 방향 자신의 의지에 따라 증언할 수 있는 자유 객체가 책임을 자율적으로 수행하기 위해, 객체..

객체지향의 사실과 오해 스터디

[객체지향의 사실과 오해] Chapter 4

역할, 책임, 협력 저자는 하나의 실험으로 인간을 바라보는 두 가지 관점의 충돌을 설명한다. 원래 인간의 본연의 특성은 이기적이고 합리적인 존재이다. 하지만 타인과 관계를 맺는 과정 속에서 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 하게 된다. 즉, 어떤 상황에 처해 있는지가 인간의 행동을 결정한다는 것이다. 저자가 말하고자 하는바는, 타인과의 협력속에서는 각 개인의 반응을 관찰하는 것은 의미가 없고 협력이라는 문맥이 인간의 행동 방식을 결정한다는 것이다. 객체의 모양을 빚는 것은 객체가 참여하는 협력이다. 협력을 먼저 고려하면서 그 협력에 참여하는 객체들의 행동들을 생각하고, 이후 그 행동들로 상태를 결정하는 순서라고 생각 정리를 했다. 이번 장에서 역할, 책임, 협력의 개념에 대..

객체지향의 사실과 오해 스터디

[객체지향의 사실과 오해] Chapter 3

타입과 추상화 초창기 지하철 노선도는 최대한 사실적으로 지형을 묘사하려 했지만 중요한 것은 그게 아니다. 지하철을 이용하는 승객의 목적은 하나의 역에서 다른 역으로 이동하는 것이다. 따라서 어떤 역에서 출발,환승을 해야 하는지, 어떤 역을 거쳐야 가장 쉽고 빠르게 목적지에 도착할 수 있는지가 중요하다. 그래서 지형의 정확성보다는 필요한 목적에 집중한 결과가 현재까지도 적용되고 있는 지하철 노선도이다. 여기서 저자는 지하철 노선의 추상화에 대해 소개 해 주고 싶었던 것 같다. 추상화를 통한 복잡성 극복 추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것이다. 지하철 노선도 예시를 통해서 알 수 있듯이 지형 정보를 제거하고 역 사이의 연결성을 강조함으로써 승객들의 목적에 맞게 ..

changha.
꾸준하게