1. 모의 면접 준비
항해99가 끝났지만 WIL 쓰는 것은 계속 된다. 이번 주는 모의 면접을 준비하면서 내가 가진 자바, 스프링 관련 지식들을 정리하고 있다.
프레임 워크
-> 뼈대라는 뜻으로 소프트웨어를 만들 때 기본적인 구조를 미리 구현해 놓은 것
장점: 기본적인 틀이 잡혀 있어 품질이 보장되고 생산성이 좋아짐
단점: 틀에 맞추어 코딩을 해야하니 익숙해지기 어렵다, 커스터마이징이 힘듬
MVC 디자인 패턴
-> 모델, 뷰, 컨트롤러로 모델은 동적 데이터, 뷰는 html, 컨트롤러는 api 관리를 각 영역에서 맡는다. 유지 보수가 용이하다.
자바의 특징
-> 1. 객체 지향형 프로그래밍:
- 데이터를 객체로 취급하여 객체의 상호작용을 통해 프로그램이 동작하는것,
- 객체를 연결시켜 프로그래밍하면 캡슐화, 상속, 추상화, 다형성의 특징 존재
- 캡슐화: 비슷한 역할을 하는 속성과 메소드들을 하나의 클래스로 묶은 것
- 상속: 클래스를 재사용하거나 확장하는 것 이것으로 코드를 재활용할 수 있다.
- 추상화: 어떤 실체로부터 공통적인 부분이나 관심있는 특성을 한 곳에 정의하는 것
- adstract 클래스: 추상 메소드를 하나 이상 가지고 있는 클래스, 단일 상속, 확장의 개념
- interface 클래스: 모든 메소드가 추상 메소드로 다중 상속이 가능하며 구현체 반드시 필요
- 다형성: 같은 모양의 코드가 다른 기능을 하는 것
- 오버라이딩: 부모 메소드에게 상속받은 메소드를 내부적으로 확장하거나 수정하여 사용하는 것
- 오버로딩: 한 클래스 내에 존재하는 같은 메소드들을 파라미터의 타입이나 갯수를 다르게 해서 정의
- 재사용성 증가 유지 보수 감소
2. 멀티 스레드 지원
- 프로세스 vs 스레드
- 프로세스: OS에서 실행에 필요한 메모리를 할당받아 메모리를 사용하는 하나의 애플리케이션
- 멀티 테스킹: 2가지 이상의 작업을 동시에 처리하는것
- 멀티 프로세스: 애플리케이션 단위의 멀티 태스킹
- 스레드: 하나의 코드 실행 흐름을 말함, 한 프로세스 내에 스레드가 2개라면, 2개의 코드 실행이 존재
- 멀티 스레드: 애플리케이션 내부에서의 멀티 태스킹
- 메인 스레드: 메인 메소드가 실행하면 시작되는 스레드로 작업 스레드를 만들어서 병렬로 코드 실행 가능
- 작업 스레드: 메인 메소드 실행 후 내부에서 자체적으로 돌아가는 하위 코드 진행
- 프로세스는 독립적이기 때문에 메모리 영역 공유 안 함
- 스레드는 스텍을 제외한 메모리 영역을 공유함
3. Collection Framework
- 자바 내에 클래스로 구현된 자료구조들의 집합
- List<E>: 중복된 데이터 허용, 순서 존재
- ArrayList: 데이터 조회는 빠르지만 데이터 삽입, 삭제가 LinkedList보다 느림
- 동적 배열로 파이썬의 리스트를 생각하면 된다. 인덱스 번호로 인덱싱하기 편하다.O(1)
- 다만 데이터를 삽입 또는 삭제할 때 데이터들을 밀거나 당겨야하기에 O(n)
- LinkedList: 데이터 조회는 느리지만 데이터 삽입, 삭제가 ArrayList에 비해 빠르다.
- 노드들의 결합으로 데이터와 포인터를 가지고 한 줄로 연결되어 있다.
- 중간 지점에 데이터를 넣을 때 O(1)이 걸리므로 빠르다. 삭제도 마찬가지
- 조회는 앞에서부터 쭉 포인터를 타면서 넘어가야하기에 O(n)이다.
- ArrayList: 데이터 조회는 빠르지만 데이터 삽입, 삭제가 LinkedList보다 느림
- List<E>: 중복된 데이터 허용, 순서 존재