전체 글

초보 개발자의 공부 블로그입니다.
·Framework/Spring
Spring Bean이란?Spring Bean은 스프링 컨테이너가 생성 및 관리하는 자바 객체를 의미한다. 즉, 객체의 생성, 초기화, 소멸등의 생명주기를 컨테이너가 담당하여 객체 간 결합도를 낮추고, 재사용성을 높이는 역할을 한다.  ✅  스프링 빈(Bean)의 등록 방법스프링 빈 등록 방법은 크게 3가지 방법이 존재한다. xml에 직접 등록@Bean 어노테이션을 이용@Component, @Controller, @Service, @Repository 어노테이션을 이용 1. XML 설정을 이용한 방식 (옛날 방식, 잘 안 쓴다.)`applicationContext.xml` 같은 XML 파일을 사용하여 직접 빈을 등록하는 방법이다. 스프링 3 이전에 많이 사용되었으나, 현재는 어노테이션 기반 설정이 주로 ..
·Language/Java
7 -> 8 메모리 구조 변화JDK 8 버전부터는 JDK 7 버전까지 사용되었던 `PermGen(Permanent Generation의 약자)`가 제거되고, `Metaspace`라는 영역이 Native Memery에 추가되었다. 1. PermGen(Permanent Generation)PermGen이란 JDK 7 버전까지 사용되던 메모리 구조로 클래스 메타데이터, 상수 풀, static 변수 등을 저장하는 데 사용되었다.  아래 이미지와 같이 JVM 메모리상 위치는 heap 영역 내부에 포함되어 있다. 기본적으로 힙 영역에 있으니 고정된 크기를 할당받는다.  ❌ PermGen 방식의 문제점PermGen 영역의 크기는 힙 영역 안에 존재하므로, 고정된 크기의 메모리 영역이다. 그렇기 때문에 실행이 되는 도..
·Language/Java
콜바이 밸류와 콜바이 래퍼런스의 기본 개념프로그래밍 언어에서 함수나 메서드를 호출할 때 인자 전달 방식에는 크게 두 가지가 있다. 콜바이 밸류(Call By Value)콜바이 래퍼런스(Call By Reference)이 두 방식은 인자를 전달하는 메커니즘의 차이를 가지며, 이로 인해 함수 내부에서 인자의 값을 변경했을 때 외부에 미치는 영향이 달라진다.  1. 콜바이 밸류(Call By Value)콜바이 벨로는 값에 의한 호출로, 함수을 호출할 때 인자의 값을 값을 복사하여 함수의 매개변수로 전달하는 방식이다. 따라서 함수 내부에서 값을 변경해도 원본 데이터에는 영향을 미치지 않는다. 이로 인해 함수 호출 후에도 원본 값이 유지된다. 이러한 특성 덕분에 부작용을 최소화할 수 있다. 2. 콜바이 래퍼런스(..
멘토링 4주차프로세스와 스레드자바 버전 별 스레드의 종류동기와 비동기, 블로킹과 논 블로킹동기화스레드 생명주기스레드 풀데드락 start와 run 메소드의 차이점 임계영역, 락리플랙션 io, nio 자바 주차가 끝이 났다. 다음 주부터 3주정도 스프링이 시작된다. 토비의 스프링 1권을 기반으로 진행되며, 자바와 동일하게 학습 시 키워드를 유추하고, 그 기간으로 깊이 있는 학습을 진행하라고 하셨다.  스프링 2주차때부터는 프로젝트 가이드가 나오고 프로젝트도 같이 진행하기 때문에 어느정도 주제를 생각해놔야한다.  스프링이 끝나는 JPA 관련 2주정도 진행하면, 어느정도 기술 면접 가이드를 끝나기 때문에 이력서 첨삭 및 지원을 시작할 예정이다.
·Language/Java
스레드와 메모리앞서 자바의 메모리 구조 포스팅에서 Stack과 Heap, Method Area에 대해 알아봤다. 스레드의 경우 JVM 메모리를 이해하는 것이 중요하다. 그러므로 간단하게 Stack과 Heap, Method Area에 대해 정리해 보고 시작하자.  StackStack은 Stack Frame 단위로 나누어져 있으며, 새로운 메서드가 실행되거나 탈출할 때마다 Stack Frame이 생성 및 소멸을 한다. Stack Frame에는 메서드 내부의 로컬 변수를 관리하는 `Local Variables Array`와 연산 과정을 일시적으로 저장하는 `Operand Stack`, 그리고 메서드 종료 시 돌아와야 할 주소나 그 외 메서드에 대한 정보를 가지고 있는 Frame Data로 구성되어 있다. He..
시간 제한과 시간 복잡도코딩 테스트의 제한 시간: 보통 `1~5초`1초에 실행 가능한 최대 연산 횟수: 약 `1억 번`알고리즘 선택 기준: 문제의 시간 제한을 고려하여 시간 복잡도를 분석하고 적절한 알고리즘을 선택해야 한다. 예시: N의 최대값이 100,000이고 제한 시간이 1초인 경우 - 허용 가능한 최대 연산 횟수: `1억 번`- 시간 복잡도가 O(N²)일 경우:     - 연산 횟수 = `100,000 × 100,000 = 100억 번`     - `1억 번을 초과하므로 사용 불가능`- 적절한 알고리즘 선택: O(N log N) 이하의 알고리즘을 고려해야 함 (예: 정렬 알고리즘, 이진 탐색 등) 1초에 최대 연산 횟수(최대 입력 크기) 시간 복잡도 최대 연산 횟수 O(N)약 1억번O(N^2)약..
·TIL
https://www.acmicpc.net/problem/1051문제N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는 열에 평행해야 한다. 입력첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다. 출력첫째 줄에 정답 정사각형의 크기를 출력한다. 예제 입력 13 5421012210022101 예제 출력 19 문제 접근완전 탐색 문제이다. 완전 탐색을 유추할 수 있는 포인트가 입력값 `NxM`의 범위가 `50`으로 작다. 최대 크기가 50×50(=2500)이므로 모든 경우를 탐색해도 충분히 가능하다...
·TIL
https://www.acmicpc.net/problem/1018 문제지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸..
·Language/Java
제네릭(Generic)제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 저장하는 기법을 의미한다. 객체별로 다른 타입의 자료가 저장될 수 있도록 한다. 1. 제네릭 클래스 기본문법 및 사용법// 제네릭을 사용한 클래스 정의class Box { private T item; public void setItem(T item) { this.item = item; } public T getItem() { return item; }}제네릭 클래스 `Box `에서 사용하는 `` 기호는 다이아몬드(Diamond)라고 불린다. 제네릭을 사용한 클래스를 제네릭 클래스(Generic Class)라고 하며, 타입 매개변수를 지정하여 다양한 타입을 처리할..
·Language/Java
예외 계층자바는 프로그램 실행 중에 발생할 수 있는 예상치 못한 상황, 즉 예외(Exception)를 처리하기 위한 메커니즘을 제공한다. 이는 프로그램의 안정성과 신뢰성을 높이는 데 중요한 역할을 한다. 자바는 예외 처리를 위한 다음 키워드를 사용한다. `try` , `catch` , `finally` , `throw` , `throws` 자바에선 객체가 기본 구성이 되며, 예외 처리용 객체도 존재한다. 위 그림은 자바 예외에 대한 객체에 대한 계층이다. `Object` : 자바에서 기본형을 제외한 모든 것은 객체로 구성되어 있다. 예외도 객체이므로 모든 객체의 최상위 부모 객체인 `Object`를 최상위 부모로 사용한다.`Throwable` : 최상위 예외이다. 하위는 `Exception`과 `Erro..
JH_DEV77
JH’s 개발블로그