[간단정리] Java에서 불변 객체(Immutable Object)란?
·
개발메모/간단정리
🔎 개요Java에서 불변 객체(Immutable Object)는 한 번 생성되면 상태(state)가 변하지 않는 객체를 말합니다.대표적으로 String, Integer, LocalDate 등 많은 표준 클래스들이 불변 객체로 설계되어 있습니다.🧩 내용✅ 불변 객체의 특징객체의 모든 필드는 final로 선언생성자에서만 값을 설정하고 이후에는 변경 불가Setter가 존재하지 않음외부에서 내부 상태를 변경할 수 없도록 방어적 복사(Defensive Copy) 사용✅ 왜 불변 객체를 사용할까?안정성(Thread-Safety)멀티스레드 환경에서 동시에 접근해도 안전합니다. 객체의 상태가 바뀌지 않으니 동기화 코드를 줄일 수 있습니다.예측 가능하고 디버깅 쉬움값이 변하지 않기 때문에 프로그램 흐름을 추적하기 더..
[간단정리] Java에서 Stack, Queue 그리고 Deque
·
개발메모/간단정리
🧭 개요최근 알고리즘 문제를 풀면서 자연스럽게 Stack이나 Queue를 사용하는 일이 많아졌습니다.그 과정에서 Java에서는 이들 대신 Deque 사용을 권장한다는 내용을 접하게 되었고,처음엔 “왜 굳이?”라는 의문이 들었습니다.자세히 알아보니 생각보다 명확한 이유들이 있었고, 앞으로 실무에서도 도움이 될 것 같다는 생각이 들어이번 기회에 Stack, Queue, Deque의 차이점과 왜 Deque가 권장되는지를 정리해보려 합니다.📚 내용1. Stack 클래스의 문제점Java에서 Stack은 LIFO(후입선출) 구조를 제공하지만, 다음과 같은 단점이 존재합니다:레거시 클래스: Stack은 JDK 1.0 시절부터 존재하는 오래된 클래스입니다.Vector 기반 구현: Stack은 Vector를 상속받고..
[간단정리] RDBMS, NoSQL 특징 및 차이점
·
개발메모/간단정리
개요데이터베이스는 데이터의 체계적 저장과 관리를 위해 사용되는 시스템으로, 크게 RDBMS(관계형 데이터베이스 관리 시스템)와 NoSQL로 나뉩니다. RDBMS는 테이블 간의 관계를 기반으로 하는 구조화된 데이터 관리 시스템으로, 데이터 무결성과 ACID 속성을 중요시합니다. 반면, NoSQL은 비정형 데이터와 대규모 데이터 처리에 적합한 분산형 데이터베이스로, 문서, 키-값, 그래프, 열 기반 모델을 포함합니다.각각의 DBMS는 사용 목적과 데이터 유형에 따라 적절한 선택이 필요합니다.1. RDBMS관계형 데이터베이스 관리 시스템(RDBMS)은 1970년대에 에드가 F. 커드에 의해 제안되었습니다. 이 시스템은 데이터 간의 관계를 테이블 형식으로 관리하며, SQL을 사용하여 데이터를 처리합니다. 테이블..
[간단정리] 객체 지향 프로그래밍 SOLID 원칙
·
개발메모/간단정리
개요SOLID는 객체 지향 프로그래밍 및 설계에서 다섯 가지 기본 원칙을 의미합니다.이 원칙들은 코드의 유지보수성과 확장성을 높이는 데 도움을 줍니다.각 원칙과 간단한 예제를 함께 살펴보겠습니다. 1. 단일 책임 원칙 (Single Responsibility Principle - SRP)2. 개방-폐쇄 원칙 (Open-Closed Principle - OCP)3. 리스코프 치환 원칙 (Liskov Substitution Principle - LSP)4. 인터페이스 분리 원칙 (Interface Segregation Principle - ISP)5. 의존성 역전 원칙 (Dependency Inversion Principle - DIP)1. 단일 책임 원칙 (Single Responsibility Princ..
[간단정리] {JSON}, <XML> 이란?
·
개발메모/간단정리
개요데이터 교환 형식은 다양한 애플리케이션과 시스템 간의 데이터 전송을 원활하게 하는 중요한 요소입니다. 이 글에서는 두 가지 대표적인 데이터 교환 형식인 JSON과 XML을 비교해보고, 각각의 장단점과 사용 사례를 살펴보겠습니다.1. JSON (JavaScript Object Notation) JSON은 가볍고 가독성이 뛰어난 데이터 교환 형식으로, 주로 웹 애플리케이션에서 널리 사용됩니다.본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷이다.즉, 프로그래밍 언어나 플랫폼에 독립적이므로, 구문 분석 및 JSON 데이터 생성을 위한 코드는 C, C++, C#, 자바, 자바스크립트, 펄, 파이썬 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있습니다.JSO..
[간단정리] 메세지 큐(Message Queue)란?
·
개발메모/간단정리
개요메시지 큐(Message Queue)는 메시지를 송신하는 애플리케이션(Producer)과 이를 수신하는 애플리케이션(Consumer) 간의 비동기 통신을 가능하게 하는 시스템입니다. 메시지 큐를 사용하면 메시지를 임시 저장하는 큐를 통해 애플리케이션 간의 통신이 이루어지며, 이는 애플리케이션의 확장성과 성능을 향상시킵니다.1. 주요 특징비동기 통신: Producer와 Consumer는 독립적으로 동작합니다. Producer가 메시지를 큐에 넣으면, Consumer가 이를 필요할 때 가져가 처리합니다. 따라서 서로 직접 통신하지 않아도 됩니다. 내결함성: 큐에 메시지를 저장함으로써, Consumer가 다운되거나 문제가 생겨도 메시지는 큐에 남아 있습니다. Consumer가 복구되면 메시지를 처리할 수 ..
[간단정리] Domain, Host, URL, URI 용어 정리
·
개발메모/간단정리
개요인터넷과 웹사이트 관리를 하다 보면 Domain, Host, URL, URI와 같은 용어들을 자주 접하게 됩니다. 이 글에서는 이러한 용어들의 정의와 차이점을 쉽게 설명해 드리겠습니다.1. Domain이란?Domain은 인터넷 상에서 웹사이트의 주소를 의미합니다. 사람들이 웹사이트를 쉽게 기억하고 접근할 수 있도록 하는 역할을 합니다. 예를 들어, google.com과 같은 주소가 도메인입니다. 주요 특징쉽게 기억할 수 있음: 숫자와 복잡한 IP 주소 대신 사용됩니다. 고유성: 각 도메인은 유일무이하며 중복될 수 없습니다. 계층 구조: 서브도메인, 2차 도메인, 최상위 도메인(TLD) 등으로 구성됩니다.예시 google.com: 구글의 주요 도메인 maps.google.com: 구글 맵의 서브도메인 ..
[간단정리] Java에서의 Hash(해시) 함수
·
개발메모/간단정리
개요 Java에서 해시 함수의 활용은 다양한 자료구조와 알고리즘에서 데이터를 효율적으로 관리하는 데 필수적입니다. 특히, hashCode() 메서드와 Hash 기반 자료구조인 HashMap과 HashSet의 사용은 Java 개발자들이 반드시 숙지해야 할 개념 중 하나입니다. 이 글에서는 해시 함수의 기본 원리와 Java에서의 활용 방법, 그리고 해시 기반 자료구조의 사용 예를 통해 이러한 개념들을 쉽게 이해할 수 있도록 돕습니다. 1. Hash 함수의 기본 원리 해시 함수는 임의 길이의 데이터를 입력받아 고정된 길이의 해시값을 출력하는 함수입니다. Java에서는 모든 객체가 Object 클래스로부터 상속받는 hashCode() 메서드를 통해 이 해시 함수의 원리를 구현합니다. 이 메서드는 객체의 고유한 ..
[간단정리] HTTP Request Method 종류 및 특징
·
개발메모/간단정리
개요 HTTP 요청 메서드 종류 및 특징 알아보기 HTTP Request Method(HTTP 요청 메서드) HTTP 요청 메서드는 인터넷을 통해 데이터를 전송하는 데 사용되는 기본 프로토콜인 HTTP(Hypertext Transfer Protocol)의 일부입니다. HTTP 요청 메서드는 클라이언트가 웹 서버에 정보를 요청하거나 작업을 수행하기 위해 보내는 명령입니다. 가장 일반적으로 사용되는 HTTP 요청 메서드는 사용자가 웹 브라우저의 주소 표시줄에 사이트 URL을 입력하고 Enter 키를 누를 때 트리거되는 GET 요청입니다. HTTP 요청 메서드 종류는 GET, POST, PUT, DELETE 등 각각의 목적을 갖는 메서드들이 있습니다. 참고: https://developer.mozilla.or..
[간단정리] JDK Dynamic Proxy vs CGLib Proxy
·
개발메모/간단정리
개요 Java/Spring 환경에서 사용되는 프록시 중 JDK Dynamic Proxy와 CGLib Proxy에 대한 기초 지식과 차이를 알아보자. 프록시(Proxy)가 뭘까? 프록시(proxy)는 대리 또는 대리인이라는 뜻을 가졌다. 업무를 하며 프록시라는 용어를 처음 접했을 때는 뜻을 모르는 상태여서, 뭔가 단어 자체가 어렵게만 느껴졌었다. ex) Proxy Server, Proxy Pattern, HA-Proxy 등.. 지금은 어느정도 단어의 뜻과 일치하게, '무언가 대신하는 ~' 느낌으로 이해하기 시작하면서 조금 더 쉽게 프록시와 관련된 내용에 대해 어렵게만 느껴졌던 부분이 해소됐다. 해당 포스팅에서는 Java에서 프록시 패턴이 적용되어, 우리가 알게 모르게 사용하고 있던 JDK Dynamic P..
[간단정리] Spring - Filter, Interceptor, AOP 특징 및 차이
·
개발메모/간단정리
개요 웹 개발을 하다 보면 실제 비즈니스 로직이 호출되기 이전, 이후에 공통적으로 처리해야 할 기능들이 존재하는데, 대표적인 예로 로깅, 인증/인가, 인코딩 변환 등이 있다. 공통적인 기능의 코드를 모든 Controller, Service 레이어에서 작성하게 되면 코드의 중복이 발생하게 되고, 공통 기능 수정이 필요한 경우 중복으로 작성된 모든 코드들을 수정해야하는 번거로움이 생길 수 있다.(수정간에 빠뜨리고 수정하지 않는 코드 또한 생길 수 있음) 따라서, 공통 기능을 모아서 Spring에서 처리 할 수 있는 방법으로 이번 간단정리의 주제인 3가지가 주로 언급된다. 1. Filter 2. Interceptor 3. AOP 3가지 방법은 약간의 차이점이 존재한다. 실행 순서 Filter와 Intercep..
[간단정리] MSA란?(등장배경, 특징, 장단점)
·
개발메모/간단정리
개요 MSA란 무엇인지 알아보자 MSA MircroService Architecture의 줄임말 마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 *서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다. *서비스 지향 아키텍처(Service Oriented Architecture(SOA)) 애플리케이션 구성요소가 통신프로토콜을 통해 다른 구성요소에 서비스를 제공하는 아키텍처 접근 방식 대규모 컴퓨터 시스템을 구축할 때의 개념으로 업무상에 일 처리에 해당하는 소프트웨어 기능을 서비스로 판단하여 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 나가는 방법론 여기서 '서비스'는 기능의 독립적 단위 MSA 등장배경 Monolithic A..
[간단정리] JAVA - 추상클래스, 인터페이스 특징 및 차이점 확실히 기억하기
·
개발메모/간단정리
개요 추상 클래스(Abstract Class)와 인터페이스(Interface)의 특징 및 차이점 알아보기 요약 추상 클래스, 인터페이스 공통/차이 정리 표 구분 추상 클래스 인터페이스 공통점 객체 생성 객체를 생성(인스턴스화)할 수 없다. 추상 메서드 추상 메서드를 포함한다. 기능적 목적 상속받는 클래스에서는 추상 메서드를 반드시 재정의하여 구현해야 한다. 차이점 개념적 목적 상속 받아서 기능을 확장시키는데 목적 구현 객체의 동일한 실행 기능을 보장하기 위한 목적 클래스 클래스다.(abstract class) 클래스가 아니다.(interface) 일반 메서드 일반 메서드 정의가 가능 일반 메서드 정의 불가능 (Java8 이후 static, default 메서드 정의 가능) 멤버 변수 클래스와 동일하게 변..
[간단정리] JAVA - 제네릭(Generic)이란?
·
개발메모/간단정리
개요 제네릭(Generic)에 대해 알아보기 제네릭(Generic)? 자바 제네릭은 generic 타입 및 메소드를 정의하고 사용 할 수 있는 언어적 특성입니다. List list = new ArrayList(); Map map = new HashMap(); 위와같이 꺽쇠()안에 클래스 타입이 명시된 패턴을 자주 발견할 수 있다. 이걸 제네릭(Generic) 이라고 부르며, 제네릭 파라미터는 꺽쇠안에 포함하여 전달한다. 파라미터 타입이나 리턴 타입에 대한 정의를 외부로 미룬다. 타입에 대해 유연성과 안정성을 확보한다. 런타임 환경에 아무런 영향이 없는 컴파일 시점의 전처리 기술 제네릭 사용 이유? 타입을 유연하게 처리하며, 잘못된 타입 사용으로 발생할 수 있는 런타임 타입 에러를 컴파일 과정에 검출..
[간단정리] 트랜잭션 격리수준(Isolation Level)
·
개발메모/간단정리
개요 트랜잭션 및 트랜잭션 격리수준에 대해 알아보기 요약 트랜잭션 격리 수준 0-LEVEL: READ UNCOMMITTED: 트랜잭션내에서 커밋하지 않은 데이터에 다른 트랜잭션의 접근이 가능 1-LEVEL: READ COMMITTED: 트랜잭션내에서 커밋된 데이터만 다른 트랜잭션이 읽는 것을 허용 2-LEVEL: REPEATABLE READ: 트랜잭션 내에서 한 번 조회한 데이터를 반복해서 조회해도 결과는 동일 3-LEVEL: SERIALIZABLE: 가장 엄격한 격리 수준으로 완벽한 읽기 일관성 모드 제공 부정합 문제 DIRTY READ: 한 트랜잭션에서 처리한 작업이 완료되지 않았음에도 불구하고 다른 트랜잭션에서 볼 수 있게 되는 현상 NON-REPEATABLE READ: 동일한 SELECT 쿼리를 ..