Java 8

[Spring] 의존성 주입

의존성 주입에는 대표적으로 2가지가 있는데, 수정자 주입과 생성자 주입이다. 이 2가지 의존성 주입에 대해 알아보고자 한다.1. 수정자 주입 (Setter Injection)방법: 객체가 생성된 후에 setter 메서드를 통해 의존성을 주입한다.장점:유연성이 높아서, 의존성이 필요하지 않을 때도 객체를 생성할 수 있다.의존성이 선택적(optional)인 경우에 적합하다.단점:의존성이 주입되지 않아도 객체가 생성되기 때문에, 객체의 필수 의존성이 누락될 위험이 있다.주입 여부를 확인하는 로직을 추가로 작성해야 할 수 있다.2. 생성자 주입 (Constructor Injection)방법: 객체가 생성될 때, 생성자를 통해 필요한 의존성을 모두 주입한다.장점:의존성이 객체 생성 시에 반드시 주입되어야 하므로,..

Java/Spring 2024.10.16

[Spring] 오브젝트와 의존관계

전략 패턴 : 개방 폐쇄 원칙의 실현에 가장 잘 들어 맞는 패턴. 전략 패턴은 자신의 기능 맥락에서 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴.라이브러리 vs 프레임워크 : 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다. 단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용한다. 반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.Spring Bean 오브젝트란? : 스프링에서 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트. 스프링 빈은 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주..

Java/Spring 2024.10.11

[Java] Enum 클래스

* 개요 Enum은 상수의 집합을 정의할 때 사용되는 타입이다. 예를 들어, 월, 일, 색상 등의 상수 값을 담는다. 자바에서는 Enum이 다른 언어보다 더 활발히 활용되며, 상수 뿐만 아니라 메서드를 집어넣어 관리할 수도 있다. Enum을 기반으로 상수 집합을 관리한다면, 코드를 리팩토링할 때 상수 집합에 대한 로직 수정 시 이 부분만 수정하면 된다는 장점이 있다. 또한 thread-safe 하기 때문에 싱글톤 패턴을 만들 때 도움이 된다. * 예제 public enum Day { MONDAY("월요일"), TUESDAY("화요일"), WEDNESDAY("수요일"), THURSDAY("목요일"), FRIDAY("금요일"), SATURDAY("토요일"), SUNDAY("일요일"); private fina..

Java/Java 2023.11.16

[Java] 오버로딩 / 오버라이딩 정리

* 오버로딩(Overloading)의 정의 C언어에서는 함수명이 고유하게 존재해야 한다. 즉 하나의 함수가 하나의 기능만을 구현해야 한다는 것이다. 그러나 자바에서는 하나의 메소드 이름으로 여러 기능을 구현할 수 있다. 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다. 이처럼 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩' 또는 '오버로딩'이라고 한다. 주의해야 할 것은 같은 이름의 메서드를 정의한다고 해서 무조건 오버로딩인 것은 아니다. 오버로딩에는 조건이 존재한다. * 오버로딩의 조건 1. 메서드 명이 같아야 한다. 2. 매개변수의 개수 또는 타입이..

Java/Java 2023.02.08

[Java] Garbage Collection(GC)의 개념과 동작 원리

* Garbage Collection의 개념 프로그램을 개발하다 보면 유효하지 않은 메모리(Garbage)가 발생한다. C언어에서는 malloc(), calloc() 함수를 통해 메모리를 동적 할당하고, free() 함수를 통해 메모리를 해제한다. 하지만 Java나 Kotlin에서는 프로그래머가 메모리를 직접 해제하지 않는다. 그 이유는 JVM의 Garbage Collector가 불필요한 메모리를 알아서 정리해주기 때문이다. Garbage Collection은 메모리 관리 기법 중 하나로, 프로그램이 동적 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다. 더이상 사용할 수 없게 된 영역이란, 어떤 변수도 가리키지 않게 된 영역을 의미한다. 예시를 통해 Garbage Collection을..

Java/Java 2023.01.13

[Spring] Springboot 사용법과 MVC 패턴

* Springboot 사용법 Spring Initializr 해당 사이트에 접속하면 spring 프로젝트를 생성할 수 있다. 어떤 방식(gradle, maven...), 어떤 언어(Java, Kotiln...), 어떤 버전(SNAPSHOT은 개발 중인 버전으로 선택 안하는 것을 권장)의 프로젝트를 생성할지 선택한다. 그 다음 Dependncies에서 필요한 부분을 add해준다. 마지막으로 Generate를 통해 zip 파일을 다운받고 압축을 푼 후 프로젝트를 import 해주면 된다. * 성공한 화면 * MVC 패턴 MVC 패턴은 Model-View-Controller의 약자로, 애플리케이션을 데이터로 처리하는 모델(Model), UI인 뷰(View), 모델과 뷰 사이에서 흐름을 제어하는 컨트롤러(Co..

Java/Spring 2022.12.30

[Java] 싱글 쓰레드와 멀티 쓰레드

* 쓰레드와 프로세스 프로세스란 간단히 말해서 '실행 중인 프로그램'이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 그래서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 '멀티 쓰레드 프로세스'라고 한다. * 멀티 쓰레딩의 장점 1. CPU의 사용률을 향상시킨다. 2. 자원을 보다 효율적으로 사용할 수 있다. 3. 사용자에 대한 응답성이 향상된다. 4. 작업이 분리되어 코드가 간결해진다. * 싱글 쓰레드와 멀티 쓰레드 두 개의 작업을 하나의 ..

Java/Java 2022.12.30

[Java] Math.random 메서드

* 개요 자바로 코딩할 때, 난수를 생성해야 할 때가 있다. 그 때마다 자꾸 Math.random 메서드를 까먹는다. 까먹지 않기 위해 포스팅을 하기로 하였다. * Math.random 메서드 public class test { public static void main(String[] args) { double data = Math.random(); System.out.println(data); // 0.0.. ~ 1.0..까지의 난수 생성 System.out.println((int)(data * 10)); // 0 ~ 10까지의 난수 생성 System.out.println((int)(data * 100)); // 0 ~ 100까지의 난수 생성 System.out.println((int)(data * ..

Java/Java 2022.12.24