
1. 서론 - DTO와 Entity 데이터 교환이 비즈니스 로직의 절반?FAQ 고객 지원 관련 비즈니스 로직을 설계하면서, Service 로직에 아래와 같은 구성을 적용했습니다. DTO를 사용함으로써 Entity 간 데이터를 교환하는 계층이 필요해졌고, 결과적으로 비즈니스 로직에 상당한 코드 라인이 추가되었습니다. '우아한 테크코스' 프리코스를 거치며 이러한 부분에서 불편함을 느끼거나 새로운 궁금증이 생겼습니다. "어떻게 하면 DTO와 Entity 간의 변환을 효율적으로 진행할 수 있을까?"라는 질문에 대한 해결책을 찾고자 고민하게 되었습니다.public class FAQService { ... // DTO -> Entity 변환 private FAQ convertToEntity(FAQDTO ..
![[Java] JUnit 입출력 테스트 코드 작성 방법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbvItNY%2FbtsI6183sbQ%2FAAAAAAAAAAAAAAAAAAAAAAKox7LdYnKzSyrkf16dGxZON0U9KjRLdjkqH1quIpMo%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3Dg09YE3KmiytU%252BYcGEHtXrSazELw%253D)
[PC] 🌙 다크 모드를 끄시면 글씨 굵기, 코드 블록을 더욱 편하게 볼 수 있습니다. 설정은 블로그 오른쪽 상단에 있습니다.1. 서론 - "입출력 테스트 코드는 어떻게 작성하지?"우아한 테크코스 (프리코스) 스터디를 시작하고 입출력 테스트 코드 작성 과정에 궁금한 점이 생겼다. 프리코스 문제는 콘솔에서 입출력을 진행한다. 비즈니스 로직을 실행시켜 값이 일치하는 테스트 로직은 어느 정도 떠오르지만, 입출력 부분은 감도 잡히지 않았다. 😢// 입력 메서드 public static String readInput() { return Console.readLine(); } // 출력 메서드 public static void printlnMessage(String message) { System.out.print..
![[Java] 증감 연산자(++n, n++) 사용의 주의점 Side Effect](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FFG4N9%2FbtsIYz5ntjT%2FAAAAAAAAAAAAAAAAAAAAADlYI_6lMKbtvJwym0eyFnBaFVPFy01ErL4fWxBuF11c%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DyQOjlI81c8GOcX58VwPSqD3C5QU%253D)
1. 서론 - 증감 연산자 사용의 주의점 Side Effect코딩테스트를 대비하기 위해 프로그래머스의 미로 탈출 문제 풀이를 시작했습니다. 기존처럼 문제의 이해와 알고리즘을 생각하며, 접근했습니다. 생각보다 문제 이해와 알고리즘 구상이 빠르게 끝나 자신 있게 코드를 작성하였고, 테스트 코드 실행 결과 100% 결과를 보고 설레는 마음과 함께 '제출 후 채점하기' 버튼을 클릭했습니다.역시.. 뭔가 너무 잘 풀린다 했습니다. 😢 그래도 틀리긴 했지만, 코딩테스트를 풀면서 항상 보는 화면이기에 차분히 문제점을 파악하기 시작했습니다. 2. 해결 방안 탐색오류의 근본적인 문제를 찾기 위해 아래와 같은 과정을 거치며 오류를 파악하려고 했습니다.구상한 알고리즘 검토잘못된 메서드 사용이 있는지 탐색값 변동 구간마다 ..
![[Java] static, final, static final 키워드를 왜 사용할까? - 변수](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbYiCvt%2FbtsIKZctuHR%2FAAAAAAAAAAAAAAAAAAAAAL43fITxpyLi6MlJvIi4_iQPEhO-xJYS8JXmye8iO2Ij%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DAzR85SwCcrErhPOYMyQDhYvHbc8%253D)
static, final, static final 키워드를 왜 사용할까?Java 언어로 작성된 외부 프로젝트 코드를 보면서 "이 변수에는 static, 저 변수에는 final, 이건 static final?" 이렇게 자주 사용된다는 것을 알게 되었습니다. 반면, 필자의 프로젝트 코드를 살펴보면 해당 키워드를 찾기 어려울 정도로 사용 빈도가 낮았습니다. 물론, 키워드의 의미는 대략 알고 있었지만, 궁극적으로 어떤 이유에서 사용하는지 이해하지 못해 잘 활용하지 못했습니다. 따라서, 본 글에는 해당 키워드를 왜? 사용하고 어떻게 활용되는지에 공부한 내용을 정리하여 개념을 확실하게 잡아보려고 합니다. 🔥 1. static, final 키워드1 - 1. static 키워드 목적static 키워드 사용하면 클래스..
![[Java] 생성자(Constructor)와 this 키워드의 목적, 특징](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FUBynx%2FbtsIE5jPTwf%2FAAAAAAAAAAAAAAAAAAAAAEp43Z4FqocZNTs-IFZ4MjdEPqWCf7NFkxthBc7ytMJk%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3D7tdvO0jBKhyfNJzqxYnm8SIxkq4%253D)
생성자(Constructor)와 this 키워드의 목적, 특징프로그래밍하다 보면 클래스를 생성하게 되고, 클래스를 생성하면 자연스럽게 '생성자'를 정의하게 됩니다. 필자도 프로그래밍 하면서, "클래스에 생성자를 정의해라"는 조언을 항상 기억하고 있었습니다. 최근에 Java 프로그래밍을 다시 한번 개념부터 짚고 넘어가면서, "생성자를 꼭 정의해야 하나?", "this 키워드 사용 방법은 알겠는데, 왜 사용하지?"라는 의문이 들었습니다. 그리하여 본 글에는 공부한 내용을 정리하며, 생성자와 this 키워드의 개념을 확실하게 익히려고 합니다. 📚1. 생성자(Constructor)란? 🤔1 - 1. 생성자의 목적과 특징'생성자' 목적'생성자'는 객체를 생성할 때, 호출되어 객체의 초기 상태를 설정합니다. 이..
![[Java] 자바 코드의 메모리 영역 JVM, JMM](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FWTWPC%2FbtsIphMQGHo%2FAAAAAAAAAAAAAAAAAAAAAO-1PyLEIg74iYFJ8gdn0XIDebaKR29sK26n7vn-sXsq%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DCprs5j3%252BJa46cZzCJFcFjHRiQAw%253D)
1. JVM, JMM'자바 가상 머신(JVM)' 내부에는 메모리 접근과 규칙을 정의하는 부분인 '자바 메모리 모델(JMM)'이 존재합니다. 'JMM' 모델은 개발자가 메모리 관리에 대해 신경 쓰지 않고도 안전하게 프로그램을 작성할 수 있도록 설계되었습니다. 또한, 메모리 접근 연산(읽기 및 쓰기)이 멀티스레드 환경에서 처리 방법을 정의해 데이터의 일관성과 동기화 문제를 해결합니다. 컴퓨터 메모리의 공간은 한정적이기에 관리에 따라 프로그램의 성능이 좌우됩니다. 따라서 Java 애플리케이션에서 메모리를 효율적으로 사용하기 위해서는 구조와 특징을 이해할 필요성이 있습니다. 📚1 - 1. 주요 구성 요소메서드 영역(Method Area)모든 스레드가 공유하는 영역클래스 데이터, 상수, 정적 변수 저장스택 영역..
![[Java] 그림으로 살펴보는 클래스, 객체, 인스턴스 의미와 차이](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbAQhat%2FbtsIleBfdfV%2FAAAAAAAAAAAAAAAAAAAAAAjMSf3R6LB8Gk2T3KhgS6RZulWUCpLyjIeVrZjidlSW%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DrrhY1tNeWVS8yB4mpxj7eIXxvYE%253D)
그림으로 살펴보는 클래스, 객체, 인스턴스 의미와 차이코드를 한 페이지에 작성하다 보면 코드가 길어지고, 중복되는 부분이 발생하게 됩니다. 이러한 문제는 코드의 가독성과 효율성을 저하시키며, 더 큰 문제를 야기할 수 있습니다. 그리하여, 앞선 문제를 방지하기 위해 코드를 클래스로 나누어 구분하고 필요할 때마다 객체를 생성하여 사용하는 방식을 선호하게 됩니다. 이를 우리는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)이라고 합니다. 따라서, 이 글에서는 객체 지향의 필수 개념인 클래스, 객체, 인스턴스가 무엇인지 알아보고, 객체와 인스턴스의 차이점도 정리해 보겠습니다. 객체 지향 프로그래밍(OOP, Object-Oriented Programming)이 궁금하시면 아래 주..