전체 글

전체 글

    Java의 Call by value, Call by reference

    안녕하세요. 정리 된 글이 많지만 오늘 call by value, call by reference에 대해서 다시한번 차근차근 알아보려고 합니다! (워낙 헷갈려서요) 테스트케이스 하나를 작성해서 실제로 값이 어떻게 들어있는지 확인을 해보도록 하겠습니다. Java 소스코드는 https://github.com/lkimilhol/tistoryblog 에서 확인 가능합니다. 1. Call by Value 개념을 정리해 보고 넘어가보도록 하죠. Call by Value란 무엇일까요? 직역하면 '값에 의한 호출' 이라고 하는데, 도통 무슨 소리인지 알 수가 없습니다. 값에 의한 호출은 메서도 인자로 값을 넘길 때 값을 '복사' 해서 넘기게 되는데요. 이 때문에 원본의 값은 변하지 않습니다. 다음 예시를 좀 보려고 하..

    Spring-data-mongodb + docker 사용해보기

    안녕하세요. 오늘은 토이프로젝트에 몽고 디비(이하 몽고) 설정을 추가해 보려고 합니다. 실무에서 몽고를 사용한 적은 있었는데요. 뭔가 깊게 사용해보지 않았다는 생각이 많았었어요! 이번 기회로 프로젝트에 몽고 의존성을 추가해보고 기획 내용을 추가하여 몽고를 사용 해보도록 하겠습니다. 모든 소스 코드는 https://github.com/lkimilhol/matchingProject 에서 확인 가능 합니다! 1. 도커에 몽고 설치 일단 저는 도커를 이용하려고 해요. docker를 pull 받도록 해보겠습니다. docker pull arm64v8/mongo 잘 추가가 되었네요. 이제 아래 명령어를 사용하여 몽고를 띄워놓겠습니다. docker run -d -p 27017:27017 --name mongo 3941..

    간단한 Spring AOP 개념과 적용

    안녕하세요. 이번에는 AOP를 적용해볼까 합니다. AOP 공부를 하면서 용어들이 헷갈리기에 정리 할 시간을 가져보려고 하는데요. 한번 천천히 알아보도록 하겠습니다. 모든 코드는 https://github.com/lkimilhol/tistoryblog에서 확인 가능합니다. 1. AOP란? AOP의 개념은 많은 분들이 아실거라 생각해요. AOP란 Aspect Oriented Programing의 약자로써 관점지향 프로그래밍이라고 불립니다. 그렇다면 관점지향 프로그래밍이란 무엇일까요? 제가 생각하는 관점지향 프로그래밍이란 공통의 관심사를 묶어놓는 프로그래밍이라고 생각하는데요.즉, 주요 기능과 부가 기능이 있을 때 공통 되는 부가기능을 하나의 처리로 묶고 주요 기능의 소스코드와 분리를 시키는 것이라고 생각해요...

    간단하게 상속과 조합을 이해해보기

    안녕하세요. 이번에는 상속과 조합에 대해서 고민을 해보려고합니다. 상속은 인터페이스의 상속, 확장을 뜻하는 것이 아닌 클래스를 상속 받아 확장하는 것으로 제한 하겠습니다. 모든 소스 코드는 https://github.com/lkimilhol/tistoryblog 에서 확인 할 수 있습니다. 예제를 보도록 하겠습니다. 우리는 카드를 통해 게임을 구현하려 합니다. 이 게임은 카드 뭉치 속에 내가 택한 번호가 있는지를 가려냅니다. 1. 어떤 문제가 있을까? Cards.java class Cards { protected List numbers = new ArrayList(); protected Cards() {} protected Cards(List numbers) { this.numbers = numbers;..

    [LeetCode] 1528. Shuffle String

    Given a string s and an integer array indices of the same length. The string s will be shuffled such that the character at the ith position moves to indices[i] in the shuffled string. Return the shuffled string. Example 1: Input: s = "codeleet", indices = [4,5,6,7,0,2,1,3] Output: "leetcode" Explanation: As shown, "codeleet" becomes "leetcode" after shuffling. Example 2: Input: s = "abc", indice..

    [LeetCode] 66. Plus One

    Given a non-empty array of decimal digits representing a non-negative integer, increment one to the integer. The digits are stored such that the most significant digit is at the head of the list, and each element in the array contains a single digit. You may assume the integer does not contain any leading zero, except the number 0 itself. Example 1: Input: digits = [1,2,3] Output: [1,2,4] Explan..

    2주차 미션 - JPA, AuditorAware 구현해 보기

    모든 소스 코드는 https://github.com/lkimilhol/tistoryblog 에서 확인 가능합니다! 안녕하세요. 이번에는 2주차 미션의 리뷰에서 알게 된 AuditorAware 구현을 해보려고 합니다. JpaAuditing, AuditorAware이라는 것이 무엇인지 알아보고, 구현을 해보도록 하겠습니다. 1. 중복되는 컬럼을 BaseEntity에 구현 BaseEntity를 abstract class로 구현하여 이를 상속받아 컬럼을 재사용 하는 방법은 잘 아실거라 생각됩니다. 전의 포스트에서 사용하였던 코드를 이용하여 데이터의 등록시간과 수정시간을 넣어 볼 예정입니다! 내용을 모르시는 분들을 위해 간단히 설명하면, User 클래스는 다수의 Computer 클래스를 갖도록 하는 1:N 관계의..

    JPA N+1 문제

    안녕하세요. 이번에는 N+1 문제를 다루어 보았습니다. N+1 문제는 JPA를 사용하면 자주 만날 수 있는 문제이지만 자칫 잘못하면 예상치 못한 곳에서 N+1 문제를 만날 수 있다고 생각해요. 따라서 문제의 원인을 머릿속에 두고 테스트케이스를 통해 원하는 결과가 잘 나오는지 확인해 보는 습관을 길러보도록 합시다! 모든 소스 코드는 https://github.com/lkimilhol/tistoryblog 에서 확인 할 수 있습니다. 저는 유저와 유저가 가지고 있는 컴퓨터를 개념적으로 표현하였고 유저들은 다수의 컴퓨터를 가질 수 있도록 연관관계를 맺었습니다. 결국 유저와 컴퓨터는 1:N의 관계를 가지게 됩니다! 먼저 유저 클래스를 보도록 하겠습니다. 1. N+1 구현하기 User.java @Entity pu..

    1주차 미션 - 로또, 원시 값 포장

    안녕하세요. 우아한 테크 캠프 프로2기로 활동한 김일호입니다. 이번에는 1주차 미션이었던 로또를 공부하며 고민하였던 내용 중 원시값 포장에 대해서 얘기 해보려고해요. 이번 미션을 통하여 고민했던 내용들을 남겨보도록 하겠습니다. https://github.com/lkimilhol/java-lotto 에서 소스 코드를 확인 하실 수 있습니다. 1. 왜? 이번 미션에서 느꼈던 점 첫 번째 입니다 :) 바로 원시값의 포장인데요. 우리는 왜 원시값을 포장해야 할까요? 다음 코드를 보도록 하겠습니다. int money = 100; 우리는 이 코드를 보고 money라는 변수에 100이라는 값이 담긴 것을 알 수 있습니다. 변수명을 보니 money, 즉 돈이 100이라는 것이군요! 우리는 이 돈을 더 할 수도 있습니다..