만쥬의 개발일기
article thumbnail
[Java / Spring] Lombok: variable not initialized in the default constructor

스프링 프로젝트 초기 설정 도중, 테스트를 돌리자 variable userRepository not initialized in the default constructor 에러가 발생했다. 생성자를 Lombok을 이용하여 만들었는데, variable not initialized in the default constructor라는 에러가 발생했다면, Lomnok이 정상적으로 동작하지 않는다는 뜻으로 다음과 같은 상황을 의심해봐야한다. Gradle 버전 확인 Gradle을 통해서 롬복 의존성 라이브러리를 추가해주었지만 동작하지 않는다면 자신의 Gradle 버전이 5.x 이상인지 확인해야한다. 그 이유는 Gradle 버전이 올라가면서 Lombok 의존성을 추가하는 방법이 바뀌었기 때문이다. Gradle 버전은 ..

[Java 기술 면접 대비] - 5. extends VS implements

상속(Inheritance)이란? 객체지향 프로그래밍, OOP에는 다음과 같은 특징들이 있다. 1. 상속과 인터페이스 (계층성) 2. 다형성, 사용편의성 (모듈화) 3. 캡슐화, 정보은닉 4. 자료 추상화 (모델링) 5. 동적 바인딩 자바에서 상속은 세가지로 구현할 수 있다. extends 부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있음 implements (interface 구현) 부모 객체는 선언만 하며 정의(내용)은 자식에서 반드시 오버라이딩 (재정의) 해서 사용해야함 abstract extends와 interface 혼합. extends하되 몇 개는 추상 메소드로 구현되어 있음 extends 상속의 가장 대표적인 형태이다. 부모의 메소드를 그대로 사용할 수 있으며..

[Java] - Lombok이란?

Lombok이란? Lombok이란 어노테이션 기반으로 코드를 자동완성 해주는 Java 라이브러리이다. Lombok은 기계적인 코드 작성 ex)생성자, getter, setter등에 대한 코드 작성을 자동화하여 코드 다이어트를 도와준다. Lombok을 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있다. Lombok 사용예시 getter, setter 만약 어느 프로젝트를 진행하면서, 변수를 많이 가지고 있는 DTO 혹은 VO 클래스를 만든다고 생각해보자. public class customer extends user { private String name; private String age; private String telephone; ..

[Spring 기술 면접 대비] - 1. IoC(Inversion of Control), 제어 역전이란? (Autowired를 쓰는 이유)

스프링 프레임워크(Spring Framework) 하면 반드시 알아야 하는 개념이 바로 DI, IoC이다. DI는 의존성 역전으로, 클린 아키텍쳐를 읽으면서도 많이 배우고 개념을 다져왔는데, IoC에 대해서는 아직 잘 모르는 것 같아서 따로 정리해본다. IoC는 스프링 뿐만 아니라 다른 프레임워크에서도 사용되는 범용적인 개념이다. 왜 IoC라는게 생겼을까? 무엇을 제어하고 왜 역전이 필요한 것인지, 천천히 알아보자. IoC의 Control, 제어란? 여기서 제어라는건 "객체에 대한 주도권을 가지고 있다"라고 생각하면 좋다. 자바는 객체지향 프로그래밍 언어이고, 모든 객체는 생명주기(Life Cycle - 객제가 생성된 후 부터 폐기될 때까지의 기간) 를 가지고 있다. 일반적으로 프레임워크를 사용하지 않는..

article thumbnail
[Java 기술 면접 대비] - 4. @Bean VS @Component

Spring으로 개발을 하다보면 @Bean과 @Component를 언제 써야할지 헷갈릴때가 있다. 둘다 목적이 명확하지 않은 Bean을 생성할때 사용하는 어노테이션인데, 정확히 차이를 짚고 넘어가보자. @Bean VS @Component (@Bean) (@Component) 위 예시처럼, @Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다. (예를 들면 ObjectMapper의 경우 ObjectMapper Class에 @Component를 선언할수는 없으니 ObjectMapper의 인스턴스를 생성하는 메소드를 만들고 해당 메소드에 @Bean을 선언하여 Bean으로 등록한다.) 개발자가 생성한 Class에 @Bean을 선언하는 것 또한 불가능하다. 개..

[Java 기술 면접 대비] - 3. Java Bean VS Spring Bean

Java와 Spring으로 개발을 하다 보면 Bean이라는 개념이 자주 등장한다. 자주 사용하는 용어이지만 제대로 정리하고 넘어간 적이 없는 것 같아서, 한번 깔끔하게 정리하고 넘어가야 할 것 같았다. Java Bean 먼저 Java Bean에 대해 알아보자. 결론부터 말하자면 Java Bean은 특정 형태의 클래스를 가르키는 뜻으로 사용된다. DTO 혹은 VO의 형태가 Java Bean이라고 생각하면 쉽다. [백엔드 기술 면접 대비] - 1. DAO, DTO, VO란? 오늘은 데이터 컨트롤의 기초라고 볼 수있는, 데이터 객체들에 대해 한 번 짚고 넘어간다. DAO(Data Access Object)란? 말 그대로, 데이터베이스의 데이터에 접근하기 위한 객체이다. 비즈니스 로직에 kangmanjoo.ti..

article thumbnail
[백엔드 기술 면접 대비] - 1. Entity, DAO, DTO, VO란?
🖥️CS/📒백엔드 2023. 11. 7. 14:51

오늘은 데이터 컨트롤의 기초라고 볼 수있는, 데이터 객체들에 대해 한 번 짚고 넘어간다. Entity란? Entity는 도메인 모델 객체로서, 실제 테이블과 매핑되어 변경 될 시 다른 여러 Class에 영향을 미치게 된다. Entity는 다음 특징들이 있다. DB의 테이블과 1대 1로 대응된다. DB의 테이블이 가지지 않은 칼럼을 필드로 가져선 안된다. 다른 클래스를 상속받거나 인터페이스의 구현체여서는 안된다. Setter 사용을 지양한다. 여기서 Setter 사용을 지양하는 이유는 , Setter의 사용이 Entity의 일관성을 해칠 수 있기 때문이라고 한다. 따라서 Setter 대신 다른 방법으로 필드에 값을 넣어 주는 것이 좋다. 또한 Entity를 생성할 때는 Builder 패턴을 사용하는 것이 ..

article thumbnail
[WSL2] - Vmmem 램(RAM) 점유율 이슈 해결하기
🛠️TOOL/📄Linux 2023. 10. 25. 21:54

문제점 WSL 2 consumes massive amounts of RAM and doesn't return it · Issue #4166 · microsoft/WSL Your Windows build number: 18917 What's wrong / what should be happening instead: WSL 2 starts using huge amounts of RAM after a while, just using it like normal. At the moment I'm using ph... github.com WSL을 사용하고, 이 글 까지 읽게 된 사람들은 모두 공감하겠지만 WSL이 램을 잡아먹는 비율은 어마어마하다. 이러한 현상은 WSL2의 특성과 리눅스의 특성의 환상의 콜라보로 인..