전체 글 174

[JPA] 11. 다대일, 반대로 말하면 일대다

연관관계의 매핑 방향성, 그리고 주인에 대한 정리가 마무리 되면, 이 매핑을 어떻게 하고 상황에 따라 주인을 어떻게 설정해야 하는지를 알아야 한다. 연관관계의 객체 관계를 보고 이를 판단하게 된다. 연관관계는 흔히 일대일, 일대다, 다대일, 다대다 로 구분된다. 이중에 이번 포스팅은 다대일, 일대다를 이야기해볼 것이다. 데이터베이스를 배울 때에는 일대다에 대해서 배운 적이 없었다. 그저 다대일이라고 이야기했을 뿐이다. JPA에 대해서 알기 전에, 데이터베이스의 다대일은 어떻게 이루어지는지 생각해보아야 한다. 다 쪽에서 외래키를 가지고, 일 쪽의 기본키를 가지게 된다. 이 외래키는 유니크하지 않다. 그래야, 여러 객체가 한 객체의 기본키를 외래키로 가질 수 있다. 다대일의 예시를 보면서 이야기하면 알기 편..

[개발생각] 우아한 테크코스 5기 1주차 온보딩 후기

https://github.com/woowacourse-precourse/java-onboarding/pull/835 [온보딩] 이장희 미션 제출합니다. by JangAJang · Pull Request #835 · woowacourse-precourse/java-onboarding github.com 1주차 코드 1주차 코드를 써보며 프로그래밍에 대한 생각들을 해보았다. 문제 자체는 간단한 알고리즘문제들을 모아둔 느낌이었다. 그런데, 프리코스를 시작하기 전 코치님들의 한마디가 떠올랐다. "이번 테크코스를 통해 더욱 공부할 수 있으면 좋겠다" 내가 이번 테크코스를 통해 공부할 수 있는 것이 무엇인지 생각해보았다. 더 나은 코드? 더 수준 높은 기능들의 활용? 등등 수많은 가짓수들이 머리를 지나갔다. 이후..

장's 개발생각 2022.11.03

[JPA] 10. 연관관계 매핑의 방향성, 그리고 주인

테이블에서는 외래키 하나로 다른 테이블을 자유롭게 이동할 수 있다. 하지만, 테이블은 이게 아닌, 참조한 객체를 매핑해서 외래키처럼 데이터베이스에 적용시킨다. 한 객체가 다른 객체를 참조하고, 이를 @JoinColumn으로 설정한 상태를 단방향 매핑이라고 한다. 참조를 하는 객체는 참조된 객체를 탐색할 수 있다. 하지만, 참조된 객체는 참조한 객체에 대한 정보가 없기 때문에 탐색을 실행할 수 없다. 이럴 때 참조된 객체도 참조한 객체를 탐색하기 위해서 양방향 매핑이라는 것을 한다. public class Order { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ORDERS_ID") private Long id; @ManyToO..

[JPA] 9. 객체지향에서 연관관계를 만들어야 하는 이유

이전에서도 이야기했듯이, 패러다임에 차이가 있다. 테이블 외래키로 다른 테이블과 연관관계를 맺는다. 객체 참조를 통해 다른 테이블을 불러온다. 이는 엄연한 차이가 존재하는데, 쉽게 생각해보면 테이블을 '길'을 만들고, 객체는 건물의 내부에 다른 건물이 존재하는 것 같다. 테이블의 길을 따라 가면 다른 테이블로 갈 수 있다. 하지만, 건물 안의 건물만 불러와 확인한다면, 그 외부의 건물을 불러올 수 없다. 이를 위해, 객체에도 테이블과 같이 외래키와 비슷한 것을 넣어주어야 한다. @Entity @Table(name = "ORDERS") public class Order { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ORDERS_..

[자바] stream()이 무엇일까?(1)

알고리즘을 풀다보면 HashMap을 다른 구조로 전환해야 하는 경우가 있다. 이를 위해서 for문을 돌리고, 이를 다시 List나 Array에 담아서 전환한 후에 이를 리턴해야 하는 수고스러움이 있다. 메서드를 분리함에 있어 이 때문에 새로운 for문 메서드를 만들고, 이 안에서 List에 담거나, 혹은 담는 조건이 있다면 조건문 메서드를 따로 만들어서 담는 방식을 사용했었다. 그러다가, stream()방식을 찾게 되었다. 이러한 수고스러움을 줄여주고, 조건을 하나의 문장에서 구현할 수 있고, 심지어 type을 변경시켜줄 수도 있다. (너무 편하다!) 이러한 stream()이 어떻게 되어있는지 찾아보았다. https://docs.oracle.com/javase/8/docs/api/java/util/str..

개발공부/자바 2022.11.01

[프로그래머스] 코딩테스트 Lv.1 신규 아이디 추천

Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/신규%20아이디%20추천/src/Solution.java 다른 코딩공부나 시험기간이 겹쳐 알고리즘을 열심히 보진 못했지만, 그래도 푸는데 3일이나 걸렸다(말도안되는 이유때문에) 일단 7개의 과정을 거쳐야 한다. 1. 대문자는 전부 소문자로 바꾸어준다. 2. 소문자, 숫자, - , _ , . 를 제외하곤 전부 지워준다. 3. 점이 여러개 있을 경우 점 하나로 바꾸어준다. 4. 처음과 마지막이 점일 경우, 지워준다. 5. 문자열이 비어있을 경우, "a"를 넣어준다. 6. 문자열의 길이가 15를 넘으면 15까지 잘라주고, 마지막이 점이면 점도 지워준다. 7. 길이가 3 이하라면 ..

[프로그래머스] 코딩테스트 Lv.1 완주하지 못한 선수

Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/완주하지%20못한%20선수/src/Solution.java 생각보다 문제의 수준 자체는 높지 않았던 것 같다. 해시맵으로 도착한 사람의 value를 +1, 도착 명단에 없는 경우 -1을 해주면 되었다. private HashMap includeParticipant(String[] par){ HashMap map = new HashMap(); for(String s : par){ includePersonToMap(s, map); } return map; } private void includePersonToMap(String s, HashMap map){ int count =..

[프로그래머스] 코딩테스트 Lv.1 키패드 누르기

Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/키패드%20누르기/src/Solution.java 문제를 확인했을 때, 일반 핸드폰에 있는 키패드와 동일한 상태에서 움직여야 한다고 해서 처음엔 키패드를 배열로 구현할 생각을 했다. 근데 문득 든 생각은, '배열이 아니라 그 버튼의 주소를 저장하면 어떨까?' 였다. 기본적으로 0을 제외한 숫자들을 생각해보면, 그 수를 n이라고 했을 때, 그 수의 좌표는 {x/3, x%3}으로 설정해 보았다. 1 {0, 1} 2 {0, 2} 3 {1, 0} 4 {1, 1} 5 {1, 2} 6 {2, 0} 7 {2, 1} 8 {2, 2} 9 {3, 0} 이 상태를 그려보았을 때, 조금 상태가 ..

[프로그래머스] 코딩테스트 Lv.1 완주하지 못한 선수

https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/완주하지%20못한%20선수/src/Solution.java 코드에 대한 생각은 쉬웠다. 해시맵을 이용했는데, 해시맵은 key, value로 이루어져 있으며, key에 value를 매핑해서 저장시키는 용도이다. key를 이용해 value를 불러오고, 수정하고, 제거하고..

[개발생각] 클린 코드, TDD를 위한 공부

사실 이 영상을 보고 조금 더 메서드를 세분화 시켜야겠다는 생각이 들었다. https://www.youtube.com/watch?v=bIeqAlmNRrA 수많은 스프링 로드맵에서 항상 TDD가 언급되어 있다. 테스트를 기반으로 코딩을 이어나간다라는 간단한 개념은 이해가 되었다. 궁금해서 더 찾아보니 JUnit을 사용해 유닛단위의 테스트를 하고, 이를 위해 유닛 단위로 코드를 더욱 세분화 시켜야 할 필요가 있음을 느꼈다. 여태까지 알고리즘은 물론, 스프링을 공부할 때에도 하드코딩을 더욱 했던 것 같다. 오히려 하나의 로직은 하나의 메서드로 구현한다고 생각했다. 제일 큰 문제는, 에러가 날 때 어디가 에러인지 모르고, 중간에 수정을 해야할 때, 어디를 건드려야 할지 모른다는 것이다. 안다 하더라도, 똑같은 ..

장's 개발생각 2022.10.20