전체 글
-
Spring) @Autowired 와 생성자 주입(Constructor Injection)Spring 2024. 8. 27. 23:40
개요@Servicepublic class MyService { public String getServiceMessage() { return "Hello from Service!"; }}위와같은 @Service Bean 이 있을때 이것을 사용하는 클래스에 어떻게 주입할것인가? 처음 Spring 을 배울때 무지성 @Autowired 를 사용했던적이 있다. 이유도 모르고 Bean 을 등록하면 (사실이때 Bean 이 뭔지도 제대로 몰랐다) @Autowired 를 선언한 변수에서 사용할수있다는것정도만 알고 막 사용했다.@RestController@RequestMapping("/api")public class MyController { @Autowired private MyServ..
-
Spring) Bean 의 생명주기(Bean Lifecycle)Spring 2024. 8. 20. 19:57
개요Spring 에서 가장 핵심적인 기능인 Bean 은 실제 콩(Bean) 처럼 생명 주기를 가지고있다.처음에 생명주기라고해서 주기적으로 생성되고 죽는건가? 싶었지만, 그 뜻이 아니라 단순하게 생성되고 마무리되기까지의 과정이다. 사실 생명주기를 왜 알아야 하는가 싶었다, 왜냐하면 Bean 은 Spring 이 실행될때 생성하고 나서 끝 아닌가? 싶기도 했고Spring 이 종료되면 메모리관리고뭐고 이제 서버가 끝나는건데 없어지는것까지 알아야하나싶었다. 하지만 생명주기를 알아야하는 이유는 이 생명주기를 알고 그 사이사이를 커스터마이징을 할 수 있고 서버가 시작하면서 Bean 설정 초기화와 종료전 수집관련해서 꼭 필요한역할이라는것을 알게되었다.그렇기에 이번글은 Bean 의 생명주기에 대해 공부해보려고한다. Be..
-
Spring) AOP 와 프록시 패턴(Proxy Pattern)Spring 2024. 8. 16. 23:01
개요Spring boot 를 하면서 @Transactional 혹은 @Before, @After 같은 어노테이션을 사용해본적이 있을겁니다. 기존에 사용하실때는 그냥 어노테이션을 선언하면 해당 기능이 동작한다. 정도로 이해하고 실제로 어떤방식으로 돌아가는지에 대해서 깊게 생각해본적이 없는경우가 많은데, 이번 기회에 AOP 와 왜 프록시패턴이 항상 같이 따라오는지 작성해보려고 합니다. 우선 AOP 와 프록시패턴에 대해 연결하기전 각각에 대해 먼저 알아보는 과정을 거치겠습니다.AOP(Aspect Oriented Programming)공통적으로 필요한 기능(횡단 관심사)을 모듈화하여, 주요 비즈니스 로직에서 분리하고 코드의 재사용성과 유지보수성을 높이는 프로그래밍 패러다임 AOP(Aspect-Oriented P..
-
Spring) DI(의존성 주입) 그리고 IoC(제어 역전)Spring 2024. 8. 10. 18:27
DI 가 나오기 전 코드DI 를 배우기 전에 DI 가 나오기 전에 여러가지 방법으로 객체를 생성했는지 Java 코드를 통해 알아봅시다. 1. 직접 인스턴스화DI가 등장하기 전에 가장 일반적인 방법은 클래스 내부에서 필요한 객체를 직접 생성하는 것이었습니다. 즉, 클래스가 자신의 의존성을 직접 관리하는 방식입니다. 보통 학교나 학원에서 Java 를 배울때 객체를 배우고 그 객체를 생성하려면 new 를 통해 생성하는것으로 배워왔습니다.public class PetController { private PetService petService = new PetService(); //직접 객체를 생성 public void handleRequest() { petService.doSomethin..
-
Java) StringBuilder 와 StringBufferCS 2024. 8. 7. 22:30
앞서 String 에 대해 깊게 공부를 했으니 이제 StringBuilder 와 StringBuffer 에 대해 깊게 배워보려고한다.https://will-of-rough.tistory.com/55 개요 StringBuilder는 가변 길이의 문자열을 생성하고 조작하는 데 사용되는 클래스StringBuilder 는 문자열을 생성하고 조작하는데 특화된 클래스다.사실 StringBuilder 는 실제 업무에서만 사용안할 뿐이지 내부에서는 굉장히 많이 사용한다.당장 String 의 내부 메소드만 보더라도 문자열 교체는 전부 StringBuilder 를 사용하고있다. 그러면 이 StringBuilder 란 도대체 무엇일까? StringBuilder 클래스public final class StringBui..
-
Java) String 부수기CS 2024. 8. 6. 23:11
개요String 은 수정이 가능한가요?어떻게 불변을 만드는걸까요?왜 불변을 만드는걸까요? 기존에 String 은 단순히 문자열 관련된것을 쓸때만 사용했는데, 항상 느끼는거지만 String 에 관한 질문은 무조건 나온다.그것도 계속된 질문으로 A를 알아? 그럼 B는 알까? 그러면 C는 알까? 하는 수준으로 진짜 어디까지 알아야 하나 싶을정도로 파도파도 계속 더 알아야한다. 그렇기에 이번 글을 통해 진짜 심해 깊은곳까지 탐험할 예정이다. 계속된 수정과 끝이없는 업데이트를 통해... String 이란? String 클래스는 문자열을 나타내는 데 사용되는 불변(immutable) 객체 이 한마디에 굉장히 많은 말이 함축되어있다, String 은 클래스이고, 문자"열"이며, "불변" "객체"이다.우선 Stri..
-
Java) 정규표현식CS 2024. 8. 5. 01:44
정규표현식이란?정규표현식(Regular Expression)은 문자열에서 특정한 패턴을 찾거나 일치시키기 위해 사용되는 특수한 텍스트 스트링 Java에서 정규표현식을 사용하면 복잡한 문자열 검색, 매칭 및 변환 작업을 효율적으로 수행 정규표현식은 특별한 기능이 들어가는건 아니고 쉽게 얘기하면 문자열에서 패턴찾기입니다.다만 이 문법이 좋은건 if 문 혹은 switch 문같은 조건문을 사용하지 않더라도 쉽게 찾는 문자열의 조건을 만드는 코드를 만들 수 있기 때문입니다. 정규표현식의 원리정규표현식 엔진이 문자열을 매칭하는 원리는 크게 두 가지 방식으로 나뉩니다: NFA(Nondeterministic Finite Automaton, 비결정적 유한 오토마타) 방식과 DFA(Deterministic Finite A..
-
Java) 가비지 컬렉션CS 2024. 8. 4. 20:38
개요가비지 컬렉션이란?자바의 가비지 컬렉션(Garbage Collection, GC)은 자바 프로그램이 동적으로 할당한 메모리를 자동으로 관리하는 메커니즘가비지 컬렉션의 주요 목적은 사용되지 않는 객체를 찾아서 메모리를 해제하는 것힙메모리에서 활동Stop The World GC를 수행하기 위해 JVM이 프로그램 실행을 멈추는 현상을 의미GC가 작동하는 동안 GC 관련 Thread를 제외한 모든 Thread는 멈추게 되어 서비스 이용에 차질이 생길 수 있다.따라서 이 시간을 최소화 시키는 것이 쟁점 가비지 컬렉션의 종류크게 알아야할것은 4가지1. Serial GC특징: 단일 스레드를 사용하여 GC 작업을 수행장점: 구현이 간단하고, 작은 애플리케이션이나 단일 스레드 환경에 적합단점: 멀티코어 시스템에서 비..