본문 바로가기

스터디/소연

(8)
Spring Web MVC에서 요청 마다 Thread가 생성되어 Controller를 통해 요청을 수행할텐데, 어떻게 1개의 Controller만 생성될 수 있을까요? 각각의 Thread는 singleton으로 생성된 Bean( ⇒ Controller 포함 ) 들을 참고하여 일을 함*이 때 생성되는 Bean들은 기본적으로 singleton> Controller 역시 singleton으로 각각의 Thread들이 하나를 공통적으로 사용한다고 보면 됨 Controller 객체는 Heap에 생성되지만 class에 대한 정보는 Method  영역에 저장됨 > 모든 Thread들이 접근 가능 하나의 Singleton Controller가 수많은 요청을 처리하는 것이 아니고 각각의 Thread가 singleton으로 생성된 Controller를 참고하여 요청을 실행함    결론생성한 Controller 클래스에 대한 정보가 JVM 메모리 영역 중 Method ..
POJO란 무엇인가요? Spring Framework에서 POJO는 무엇이 될 수 있을까요? POJO(Plain Old Java Object) 단순한 자바 오브젝트 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트 프레임워크 인터페이스, 클래스를 구현하거나 확장하지 않은 단순한 클래스 Java에서 제공하는 API외 다른 요소에 종속되지 않음 특정 규약과 환경에 종속되지 않아 코드가 간결하고 테스트 자동화에 유리함 (특정 기업의 프레임워크나 서버에서만 동작가능한 코드라면 POJO라 할 수 없음) 장점 - 깔끔한 코드 - 간편한 테스트 - 객체지향적인 설계를 자유롭게 적용 POJO 방식으로 클래스 만들어보기 public class Student { String name; private int marks; public int rollN..
스프링 Bean의 Scope에 대해서 설명해주세요. Scope: 빈이 존재할 수 있는 범위 스코프 종류 Singleton 기본값 하나의 스프링 컨테이너에 한 개만 사용 가능 스프링 컨테이너의 시작과 종료까지 유지(가장 넓은 범위의 스코프) Prototype 매번 사용될 때마다 빈을 생성해서 사용 빈의 생성과 의존관계 주입까지만 관여 매우 짧은 범위의 스코프 Request 웹 요청이 들어오고 나갈 때까지 빈을 사용 web-aware context에서만 사용 가능 Session 웹 세션이 생성되고 종료될 때까지 하나의 빈을 사용 web-aware context에서만 사용 가능 Application 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 web-aware context에서만 사용 가능 Websocket Websocket 라이프사이클 안에서 한 개의..
자료형 - HashSet, HashMap HashSet hash table을 사용해 Set을 구현 객체 그 자체를 저장, null 요소도 허용, 중복 X, 순서 유지 X *저장 순서를 유지하고 싶으면 LinkedHashSet을 사용 탐색에 특화된 자료구조로 평균 **O(1)**의 시간복잡도로 데이터를 탐색, 삽입, 삭제가 가능해, List보다 빠름 Set set = new HashSet(); set.add(null); // 1개의 null만 등록 가능 set.add(1); set.add(1); // 중복된 데이터는 등록 안됨 System.out.println("Set 사이즈: " + set.size()); // Set 사이즈: 2 System.out.println("1을 포함하나요? " + set.contains(1)); // true Syst..
자료형 - Array / ArrayList / LinkedList Array 선형 자료구조(Data Structure)중 하나로 동일한 타입의 연관된 데이터를 메모리에 연속적으로 저장하여 하나의 변수에 묶어서 관리하기 위한 자료 구조 장점 연속된 메모리 공간에 요소를 저장하므로, 메모리 공간의 효율적 사용 가능 행렬같은 다차원 데이터 표현 가능 배열은 인덱스를 사용 > 빠른 접근이 가능(인덱스를 알고 있으면 상수 시간(O(1))에 접근할 수 있음) 단점 배열 중간에 요소를 삽입하거나 삭제하려면 해당 위치 이후의 요소들을 모두 이동시켜야 하므로 O(n)의 시간 복잡도를 가짐 > 성능 저하 초래 배열이 가진 정적 크기의 한계를 극복하기 위해 사용하는 것이 ArrayList 생성할 때 크기를 정하고 이후에 변경할 수 없음 > 미리 필요한 데이터의 양을 예측해서 배열을 생성해..
자료형 - String / StringBuffer String 문자열 객체의 인스턴스 주소를 담고 있는 참조형(reference type) 변수 스택(stack) 영역이 아닌 객체와 같이 힙(heap) 에서 문자열 데이터가 생성되고 다뤄짐 Java에서 String은 불변(immutable) 객체로 한 번 생성된 String 객체의 값은 변경될 수 없음 불변성 때문에 여러 쓰레드에서 동시에 사용해도 안전 String 클래스에 있는 모든 메소드들은 원래의 문자열을 변경X, 새로운 String 객체를 반환 ex) replace(), substring(), toLowerCase(), toUpperCase() 등과 같은 String 클래스의 메소드들을 사용 > 원래의 문자열 자체를 수정하는 것이 아니라 수정된 새로운 문자열을 가진 새로운 String 객체를 반환..
이진 탐색 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘 *배열이 정렬되어 있어야 한다는 조건이 필요하기 때문에 배열이 정렬되어 있지 않은 경우에는 정렬 작업 필요 탐색 범위를 절반씩 줄여나가기 때문에 선형탐색에 비해 빠른 속도를 보장 찾고자 하는 항목의 방향이 정해지면 반대 방향은 탐색할 필요가 없음 cf) 선형탐색(Linear Search) 이란? 배열(Array)이나 리스트(List)와 같은 데이터 구조에서 특정한 값을 찾는 알고리즘 탐색 과정 배열의 중간 값을 먼저 찾고 해당 값을 찾는 값과 비교 중간 값 > 찾는 값일 경우: 왼쪽 부분에서 탐색 진행 중간 값 < 찾는 값일 경우: 오른쪽 부분에서 탐색 진행 (이 과정을 찾는 값이 나올 때까지 반복) Sequential Search는 원하는..
시간복잡도(Time Complexity) 더보기 int[] multiply(int[] inputs, int multiplier){ int[] nums = new int[inputs.length]; //C1 for(int i = 0;i