🔍 변수의 스코프(Scope)란?변수의 스코프(Scope)란 변수가 선언된 위치에 따라 접근할 수 있는 범위를 의미합니다. 적절한 스코프 설정은 메모리 사용 최적화, 코드 가독성 및 유지보수성 향상시키는 데 중요한 역할을 합니다.🏷️ 변수의 종류에 따른 스코프자바에서 변수는 선언 위치에 따라 지역변수(Local Variable), 멤버 변수(Member Variable)로 나뉘며, 멤버 변수는 다시 클래스 변수(Class Variable)와 인스턴스 변수(Instance Variable)로 구분됩니다.📌 지역 변수(Local Variable)특정 블록 {} 내에서만 사용할 수 있는 변수입니다.메서드 내에서 선언된 변수들은 해당 메서드 내에서만 접근이 가능합니다.블록이 끝나면 메모리에서 자동으로 해제..
백앤드

빈 등록과 관리 방법의 다양한 패턴스프링에서는 빈을 등록하고 관리하는 다양한 방법을 제공하고, 개발자가 애플리케이션 요구사항에 맞는 방식을 선택할 수 있습니다. 수동 등록과 자동 등록의 차이, 조건부 빈 등록, 여러 빈 중 우선순위를 설정하는 방법 등 다양한 패턴을 사용하면 더욱 유연한 애플리케이션 구성이 가능합니다.수동 빈 등록스프링에서는 @Bean 애노테이션을 사용해서 수동으로 빈을 등록할 수 있습니다. 이 방법은 주로 외부 라이브러리나 복잡한 초기화 로직을 가진 객체를 빈으로 등록할 때 사용합니다. @Bean 애노테이션은 @Configuration 클래스 내부에서 사용되며, 스프링이 이 메서드를 호출해서 반환된 객체를 빈으로 등록하게 됩니다.@Configurationpublic class AppCo..

스프링 빈 스코프 개요스프링에서 빈 스코프는 빈의 생명주기를 정의하는 중요한 개념입니다. 즉, 스프링 IoC 컨테이너가 빈을 언제 생성하고 어떻게 관리하고, 어떻게 주입할지 결정하는 설정입니다. 스프링은 다양한 스코프를 지원하고, 각각의 스코프는 특정 시점에서 빈을 어떻게 주입할지를 정의합니다. 스프링에서 지원하는 대표적인 빈 스코프에는 아래와 같은 방법이 있습니다.싱글톤(Singleton) : 기본 스코프로, 애플리케이션 전체에서 하나의 빈 인스턴스만 생성하고 공유합니다.프로토타입(Prototype) : 요청할 때마다 새로운 빈 인스턴스를 생성합니다.Request : 웹 애플리케이션의 HTTP 요청 시마다 새로운 빈을 생성합니다.Session : HTTP 세션당 하나의 빈 인스턴스를 생성하고, 세션이 ..

DI(Dependency Injection, 의존성 주입) 가이드DI는 객체가 직접 자신의 의존성을 관리하지 않고, 외부에서 필요한 의존성을 주입받는 설계 패턴을 의미합니다. 이는 객체 간의 결합도를 낮추어 코드의 유지보수성과 확장성을 높여주며, IoC의 핵심적인 구현 방식 중 하나입니다. 스프링 프레임워크에서는 IoC 컨테이너가 객체를 생성하고 의존성을 주입해 주며, 이를 통해 객체 간의 강한 결합을 피할 수 있습니다.IoC와 DI의 관계 : IoC는 객체의 제어권을 외부로 넘김으로써 객체 간의 결합도를 낮추는 원리를 의미합니다. DI는 이 IoC의 구체적인 구현 방법으로, 객체가 직접 의존성을 생성하지 않고 스프링 IoC 컨테이너가 대신 객체를 생성하고 주입해 주는 방식입니다.DI 방식의 차이점과 성..

캡슐화(Encapsulation)란?캡슐화는 객체지향 프로그래밍의 중요한 개념으로, 객체 내부에서 데이터를 보호하고 외부에서 직접 접근할 수 없도록 막습니다. 이 과정에서 객체 내부 구현이 변경되더라도 외부 코드에 영향을 주지 않도록 해서, 유지보수성을 크게 향상시킬 수 있습니다. 즉, 데이터의 무결성 보호와 유연한 코드 수정이 주요 목적입니다.캡슐화의 주요 목적데이터의 직접적인 접근을 제한합니다.데이터를 수정하거나 가져올 때 검증 로직을 추가해서 안전하게 처리합니다.외부에 객체의 내부 구현을 숨기고, 필요한 정보만 노출해서 코드의 유연성을 높입니다.접근 제어자와 정보 은닉접근 제어자는 정보 은닉과 캡슐화를 구현하는 기본 수단입니다. 정보 은닉은 불필요한 데이터 노출을 막고, 객체의 외부에서 특정 속성에..

추상화(Abstraction)란?추상화는 복잡한 현실 세계의 객체를 프로그램에서 다루기 쉽도록 필수적인 속성과 기능만을 남기고, 세부 사항은 감추는 과정입니다. 객체의 중요한 속성에 집중하고, 불필요한 세부 사항을 감춰서 설계의 간결함을 유지할 수 있습니다. 이는 객체지향의 중요한 개념 중 하나로 프로그램의 유지보수성을 높이고, 향후 확장성을 고려한 설계를 가능하게 합니다.추상 클래스 개념 및 작성 방법추상 클래스는 공통적인 속성이나 메서드를 정의하는 동시에, 일부는 구체적으로 구현하지 않고 하위 클래스에서 구현을 강제하는 클래스입니다. 추상 클래스는 직접 인스턴스를 생성할 수 없고, 반드시 상속받은 자식 클래스에서 구체화되어야 합니다. 추상 클래스는 abstract 키워드를 사용해서 정의합니다. 추상 ..

상속이란?상속(Inheritance)은 객체지향 프로그래밍에서 핵심 개념 중 하나로, 하나의 클래스가 다른 클래스의 속성과 메서드를 물려받아 재사용할 수 있는 기능입니다. 이를 통해 코드의 중복을 줄이고 유지보수를 쉽게 할 수 있으며, 다형성을 구현할 수 있는 기초가 됩니다.상속의 개념과 장점상속은 기존의 클래스(부모 클래스 또는 슈퍼 클래스)의 속성 및 메서드를 새로운 클래스(자식 클래스 또는 서브 클래스)가 상속받아 사용하는 것입니다. 자식 클래스는 부모 클래스의 모든 멤버(필드와 메서드)를 물려받으며, 이를 활용해 새로운 기능을 추가하거나 기존 기능을 수정(오버라이딩)할 수 있습니다.// 부모 클래스public class Animal { String name; void eat() { ..
📚 클래스와 객체의 개요객체지향 프로그래밍에서 클래스(Class)와 객체(Object)는 핵심 개념입니다. 클래스는 객체를 생성하기 위한 설계도이며, 객체는 그 설계도를 바탕으로 생성된 실체입니다. 속성(필드)과 메서드(기능)를 정의한 객체가 어떤 데이터를 가지고 어떤 동작을 할 수 있는지를 결정합니다. 클래스는 추상적인 개념으로, 구체적인 데이터를 가지고 있진 않지만, 객체를 생성할 수 있는 템플릿을 제공합니다. 클래스를 사용하면 코드가 더 구조적이고 재사용 가능해지며, 유지보수가 용이해집니다.🏗️ 클래스란?클래스는 객체를 생성하기 위한 템플릿('틀' 또는 '설계도')입니다. 클래스는 객체가 지닌 속성(필드)과 메서드(기능)를 정의합니다. 클래스 자체는 추상적인 개념으로, 객체를 만들기 위한 설계도..

그래프(Graph)란 무엇인가?그래프는 정점(Vertex)과 간선(Edge)으로 구성된 자료구조입니다. 각 정점은 데이터를 나타내고, 간선은 두 정점 간의 관계를 나타냅니다. 그래프는 네트워크 구조를 모델링하거나 경로 탐색, 순서 관계 등을 해결하는 데 사용됩니다.그래프의 기본 용어정점(Vertex) : 그래프의 기본 요소로 데이터를 저장합니다.간선(Edge) : 두 정점을 연결해서 관계를 나타냅니다. 방향이 있을 수도, 없을 수도 있습니다.그래프의 종류그래프는 간선의 방향성 여부와 가중치의 존재에 따라 여러 가지 유형으로 나눌 수 있습니다.1. 방향 그래프(Directed Graph)방향 그래프는 간선이 특정 방향을 가지는 그래프입니다. 정점 A에서 B로 연결되어 있을 때, 그 반대로는 연결되지 않는 ..

자바의 문자열(String)자바에서 String 클래스는 문자열을 다루는 매우 중요한 클래스로 다양한 기능을 제공합니다. 자바의 문자열은 불변(immutable)하며, 효율적으로 다루기 위해 다양한 메서드를 제공하고 있습니다.String Class의 이해자바에서 문자열을 생성하는 방법은 문자열 리터럴 방식과 new 키워드를 사용한 생성자 방식 두 가지가 있습니다.String str1 = "Hello"; // 문자열 리터럴String str2 = new String("Hello"); // String 객체 생성문자열 리터럴 : JVM은 문자열 리터럴을 String pool이라는 메모리 공간에 저장합니다. 동일한 리터럴 값이 여러 번 사용되면 새로운 객체를 생성하지 않고, String pool에 이미 저장한..