개발(89)
-
[Design Pattern] GoF's Builder vs. Joshua Bloch's Builder
빌더패턴은 오브젝트 생성과 관련된 패턴이다. ( Createtional design pattern ) 빌더 패턴과 관련해서 GoF가 소개한것과 Joshua Bloch가 소개한 빌더패턴이 약간 다른데 오늘은 두가지 코드를 모두 작성해보려고 한다. GoF's Builder Pattern 큰 맥락은 비슷하지만 GoF 빌더패턴을 구현하는 방법에 따라 인터페이스가 좀더 추가되는 경우가 있다. 개인적으로 아래의 예시가 제일 코드가 심플하고 이해가능한(?)수준인것 같다. GeeksForGeeks에 있는 예제코드는 개인적으로 너무 장황한 느낌이다. Builder Say you have a constructor with ten optional parameters. Calling such a beast is very in..
2021.12.26 -
[Java] Lambda Expression Quick View
Lambda 표현식은 Java 8 버전에서 정식 발표되었다. 함수형 프로그래밍을 지원하기 위해 Java가 첫번째로 도입한 것이 바로 Lambda 표현식이다. 함수형 프로그래밍을 공부하다 보면 Pure Function(순수 함수), higher-order function(고계 함수) 등 다양한 함수들을 만나게되는데 Lambda는 그중 anonymous function(익명 함수)의 특성을 가지고 있다. 따라서 우리가 알고 있는 일반적인 함수와 달리 Lambda는 함수의 이름이 없다. Lambda는 Class에 속하지 않고도 그 자체로 생성이 가능하다는 주요한 특징이 있다. 또한, 변수처럼 파라미터로 전달하거나 특정 요청에 의해 언제든지 실행될 수 있다. Lambda는 간단한 이벤트 리스너나 콜백함수로 사용..
2021.12.20 -
[알고리즘/자바] 백준 1051번 - 숫자 정사각형
오랜만에 알고리즘 한문제 1051번: 숫자 정사각형 N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 www.acmicpc.net MxN 사이즈의 행렬속에서 꼭지점의 숫자가 같은 (사이즈가 가장 큰)정방행렬을 찾는 문제다. 아래와 같은 행렬이 있다고 할때 꼭지점 숫자가 같은 경우는 2가지 Case가 있으며, 그중 사이즈가 가장큰 정방행렬 (붉은색 박스)의 행과 열의 길이의 곱이 정답이 된다. 해결법은 아래 그림처럼 행렬값을 기준으로 우측,아래쪽, 우측하단의 숫자들을 확인하면된다. 아래는 구현 소스코드 mport java.io.BufferedReader; import..
2021.12.07 -
[JPA] @ManyToOne, @OneToMany 이해하기
테이블 구조 지난 포스팅에 이어 @ManyToOne과 @OneToMany에 대해서 예시 코드를 작성한다. 은행 서비스에서 사용자(User)가 1개 이상의 계좌(Account)를 가질수 있다면 아래처럼 물리 테이블을 설계할것이다. TABLE_USER 입장에서 보면 OneToMany이고, TABLE_ACCOUNT 입장에서 보면 ManyToOne이다. @ManyToOne 단방향 TABLE_ACCOUNT 테이블에 존재하는 user_id 컬럼을 통해 Account Entity에 있는 user 필드의 정보를 채운다. 여러개의 계좌가 사용자 한명에게 사용될수 있으므로 @ManyToOne 어노테이션을 추가한다. 연관관계의 주인임을 나타내고 물리 테이블에 있는 user_id 컬럼을 통해 user 필드를 채우기 위해 @J..
2021.11.29 -
[JPA] mappedBy 이해하기
샘플 코드를 통해 mappedBy에 대해 이해한다. ( 잘못 설명된 부분 있으면 댓글 달아주세요 ) 테이블 구조 이전 포스팅과 같이 테이블을 설계했다. 이전 포스팅에서 User Entity의 portfolio 필드에 @OneToOne 옵션을 추가함으로써 사용자 정보 호출시 포트폴리오 정보도 함께 조회할 수 있도록 했다. 이번엔 반대로 포트폴리오 정보 호출시 사용자 정보를 함께 호출 할수 있도록 해보자. 핵심은 TABLE_PORTFOLIO 테이블에 user_id라는 PK 컬럼을 만들지 않는다는 것이다. @OneToOne 추가 먼저 Portfolio Entity에 User 클래스 타입의 필드를 추가한다. Portfolio Entity와 User Entity는 1대1 관계를 가지므로 @OneToOne 어노테이..
2021.11.16 -
[JPA] 단방향 @OneToOne , @JoinColumn
물리테이블 설계 예시로 자산 포트폴리오 관리를 위한 서비스를 구현하고자 한다. 이상하긴 하지만 "사용자는 하나의 포트폴리오만 만들수 있다." 라는 요구사항이 있다고 했을때 아래와 같은 물리테이블을 생성할것이다. 위같은 테이블간의 관계는 소스코드상에서 어떻게 코딩할까? 테이블의 컬럼과 같도록 Entity 필드 맞추기 첫번째 방법으로는 테이블과 똑같이 필드를 구성하는것이다. 위 방법은 Entity의 필드와 Table의 컬럼이 동일하기때문에 이해하기 쉽다는 장점이 있다. 하지만 User별 Portfolio 정보를 가져오는 경우처럼 테이블간의 연관관계를 통한 데이터 접근을 수행하려고 할때 다소 번거로운 코드를 작성해야하는 단점이 있다. ( User Entity 정보를 가져와서 Portfolio Entity를 다..
2021.11.11