Java 37

[Interview Question] Overloading과 Overriding의 차이점은 무엇인가요?

Java에서 객체 지향의 특징 중 다형성을 구현하는 방식으로 Overloading, Overriding 2가지 방식이 존재합니다. Overloading의 경우 같은 메소드 이름을 갖지만 매개 변수의 개수, 종류들을 다르게 하여 컴파일 시점에서 메소드가 결정되도록 하는 방식입니다. 이럴 때, 같은 메소드지만 여러가지 매개변수를 활용해서 구현할 수 있습니다.Overloading을 사용했을 때 장점은 메소드 이름은 같지만 다양한 타입의 매개변수를 넣어서 메소드를 활용할 수 있다는 점에서 코드 중복을 줄일 수 있고 코드 가독성을 늘릴 수 있습니다. Overriding의 경우 상속에서 부모클래스에 있는 메소드를 자식 클래스에서 재정의하여, 실행방식과 실행시점등을 객체의 타입에 따라 다르게 실행시킬 수 있는 방식입..

Interview Question 2025.08.31

[Project - Howru] (4) 채팅 NLP 기반 사용자 추천 시스템 구현

NLP Tagging Service를 별도의 모듈로 구현했습니다.이 서비스는 MSA 아키텍처에서 “사용자 관심사 분석기” 역할을 담당합니다.fastapi-api/ ├── analysisTag.py # NLP 태깅 서비스 메인 코드 ├── Dockerfile # 컨테이너 실행 환경 ├── requirements.txt # 의존성 패키지 └── fastapi-api.iml # IDE 설정 파일왜 MSA로 분리했는가?확장성: NLP 연산은 자원 소모가 크기 때문에 별도의 서비스로 분리하여 독립적으로 확장 가능독립 배포: Dockerfile 기반으로 채팅 서비스, 알림 서비스와 분리해 배포 가능데이터 분리: MongoDB에 독립 컬렉션을 사용유연성: 새로운 태그/키워..

멋사 부트캠프 2025.08.20

[Project - Howru] (2) ChatRoom Domain 구현

ChatRoom 도메인 구현채팅이 일어날 수 있는 공간(=채팅방)이 필요하다.그래서 이번 포스트에서는 채팅방 생성 및 관리 도메인인 "ChatRoom" 을 먼저 설계하고 구현해보자. 1. ChatRoom 도메인 요구사항채팅방 생성유저 A가 유저 B에게 채팅 요청을 보낼 수 있다. 요청을 보낸경우 채팅방이 DB에 생성된다.채팅방은 항상 "1:1" 구조다 (추후 그룹채팅방으로 확장 가능하도록 Enum으로 구분)B가 수락해야 채팅방이 활성화된다WebSocket 연결용으로 "UUID 기반 방 식별자"가 필요하다사용자가 방과 연결 해제하면 해당 사용자의 ChatRoomMember 레코드를 삭제한다채팅메시지 저장영속/캐시 이중화 전략을 사용하여, 채팅 메시지를 Redis에 최대 30개 저장(추후에 TTL 설정으로 ..

멋사 부트캠프 2025.08.11

[JAVA] 코드의 재사용을 상속(Inheritance)으로 모두 해결할 수 있을까?

프로젝트를 하다 보면, 반복되는 기능을 여러 클래스에서 재사용하고 싶을 때가 있다. 이럴 때 상속을 이용하면 재사용 가능하다. 상속(Inheritance)이란?상속(Inheritance)은 객체지향 프로그래밍의 개념 중 하나로, 기존 클래스의 기능을 자식 클래스가 물려받는 것을 말한다. 중복 코드를 줄이고, 공통 기능을 재사용하기 위한 수단이다.public class Animal { public void breathe() { System.out.println("숨을 쉰다"); }}public class Dog extends Animal { public void bark() { System.out.println("멍멍"); }}이렇게 자식 클래스인 Dog이 부..

JAVA 2025.06.11

[JAVA] 이터레이터 패턴(Iterator Pattern)이 없어도 될 것 같은데.. 왜 사용할까?

객체에 있는 자료구조를 접근할 때, 직접 객체에 접근하여 반복문을 사용하여 자료를 검색한다. 그럼 이터레이터 패턴을 사용해서 자료구조를 순회하는 이유는 무엇일까? 이터레이터 패턴(Iterator Pattern)이란?이터레이터 패턴은 컬렉션의 내부 구조를 노출하지 않고, 그 안의 요소를 순차적으로 접근할 수 있게 해주는 디자인 패턴이다. 컬렉션이 어떤 방식으로 데이터를 담고 있든, 우리는 그 구조를 몰라도 next() 함수로 다음 데이터를 알아 낼 수 있다. 구현// 집합 인터페이스interface Aggregate { Iterator createIterator();}// 이터레이터 인터페이스interface Iterator { boolean hasNext(); String next();}..

JAVA 2025.06.10

[JAVA] 프록시 패턴(Proxy Pattern)과 데코레이터 패턴(Decorator Pattern)

객체지향 설계에서 자주 등장하는 디자인 패턴 중 하나인 프록시(Proxy) 패턴과 데코레이터(Decorator) 패턴은 구조는 유사하지만 목적은 전혀 다른 패턴이다. 프록시 패턴이란?프록시(Proxy) 패턴은 실제 객체에 접근하기 전, 중간 객체를 통해 접근을 제어하는 패턴입니다. 이 중간 객체는 실제 객체와 동일한 인터페이스를 구현하며, 다음과 같은 용도로 활용된다.접근 제어 : 권한이 있는 사용자만 접근지연 로딩 : 실제 객체를 사용할 시점에 생성캐싱 : 동일 요청에 대해 미리 데이터를 준비해 놓고 빠른 응답로깅 : 호출 및 실행 내역 기록보안 : 요청 유효성 검사 등구현public interface Image { void display();}public class RealImage implem..

JAVA 2025.06.10

[Spring] MVC, MVP, MVVM의 차이는 무엇일까?

Spring 프레임워크에서 주로 사용되는 MVC 구조는 익숙하지만, 프론트엔드나 모바일 개발 환경에서는 MVP, MVVM 구조도 자주 등장한다. 각 구조는 어떤 차이를 가지고 있고, 어떤 상황에서 각 구조를 사용하는걸까? 1. MVC (Model-View-Controller) 패턴애플리케이션의 구성요소를 Model, View, Controller 3가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다. 구성 요소(1) 모델(Model)모델은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻한다. 뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델을 생성하거나 갱신한다. (2) 뷰(View)뷰는 사용자에게 보여지는 인터페이스 요소, 화면을 뜻한다. 모델이 가지..

SPRING 2025.06.07

[Shop Project] HTTP vs HTTPS, SSL인증서 생성하기(2)

HTTPS를 개발환경(Localhost)에서 적용하는 방법Self-signed SSL 인증서 만들기keytool -genkeypair -alias myshop -keyalg RSA -keystore keystore.p12 -storetype PKCS12 -storepass 123456 -validity 3650HTTPS 적용을 위해 테스트용 인증서를 만드는 명령어이다. Java의 keytool 명령어로 공개키와 개인키 쌍을 생성하고, 이를 keystore.p12라는 파일에 저장했다. 생성된 kestore.p12파일을 resource 폴더에 위치시키면 스프링 부트에서 HTTPS 설정에 사용된다.2. application.yml 설정 확인server: port: 8443 ssl: enabled: t..