1. 최종 프로젝트
컨트롤러 간 메서드와 URL이 같은 경우, 빌드 시 오류 발생
aplication.properties 등 개인정보가 담겨있는 파일을 깃허브에서 권한 없는 사람이 받을 수 없도록 하는 방법 강구 및 적용
테스트 코드 적용
2. 후발대 수업 및 과제
익명 클래스
- 내부 클래스의 일종으로 리터럴하게 이름이 없는 클래스를 의미한다
- 클래스의 객체를 생성함과 동시에 메서드를 작성할 수 있다(클래스를 정의할 수 있다?)
~ 익명으로 인라인하여 선언과 사용을 동시에 진행한다
-> 부모 클래스의 자원을 일회성으로 재정의해 사용하기 위한 용도, 생성자를 가질 필요가 없다
-> 스택이 끝나면 삭제되어 메모리 측면의 이점이 있다
- 익명 클래스의 메서드를 외부에서 호출하는 것은 오버라이딩한 메서드만 해당되고, 익명 클래스에서 새로 생성한 메서드는 외부 호출이 불가능하다
익명 클래스의 선언 위치와 그에 따른 역할
1) 클래스 필드로 이용 : 클래스 내부의 다른 메서드에서 필드로 이용
2) 메서드에서 지역변수로 선언하고 사용
3) 메서드의 인자로서 익명클래스를 활용
람다 함수
참고 글 : https://true-bird.tistory.com/84
- 메서드의 매개변수로 전달될 수 있고, 변수에 저장될 수 있다. 즉 전달되는 매개변수에 따라 그 역할이 결정 될 수 있다
- 컴파일러 추론에 의지하고 추론이 가능한 코드는 모두 제거해 코드를 간결하게 한다
- 파라미터와 몸체로 구분하고, 그 사이에 -> 구분을 추가해 식을 완성한다
ex)
메서드의 인자가 없는 경우 : () -> {}
- 몸체 부분이 단일 행일 경우 중괄호와 return, 세미콜론을 생략할 수 있다
또한 인자의 타입을 컴파일러가 알 수 있는 경우 타입의 인자도 생략하여 작성할 수 있다
ex) 인자 -> System.out.println(인자)
-return이 있는 경우에는 중괄호를 생략할 수 없다 ~ 리턴을 지우면 생략 가능
cf) 함수와 메서드의 차이 : 자바는 모든 기능을 클래스 안에서 작성해야 하므로 메서드로 통칭
*람다식은 익명 클래스의 일종이기 때문에 앞서 익명 클래스처럼 인자, 메서드의 리턴 값으로 활용할 수 있다. 또한 추상 메서드가 하나만 있는 부모 인터페이스가 필요하다
~ 이를 검증할 수 있는 어노테이션 : @FunctionalInterface
함수형 인터페이스 : 다른 프로그래밍 언어에서 "함수"같은 역할을 한다는 의미(클래스 밖에서 만들 수 있는 메서드)
- @FunctionalInterface 어노테이션을 선언해야 한다
- 추상 메서드가 한 개만 선언되어야 한다
- interface로 선언되어야 한다
스트림
장점 : 간단하게 병렬처리(하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것)가 가능하다.
~ 쓰레드를 이용해 많은 요소들을 빠르게 처리할 수 있다
생성 방법
- Arrays.stream();
- 컬렉션 프레임워크에서는 스트림을 바로 만들 수 있다
- Stream.of();로도 생성 가능
*람다 식의 다른 형태 : 메서드 참조
스프링 프레임워크의 특징 및 장점
1) 객체지향 프로그래밍에 기반
- 서버 개발시 크게 3계층으로 나누어 구현할 수 있다
- 클래스 1개를 선언하고 재사용할 수 있다
- 모듈화가 잘 되어 있어 필요한 모듈들만 조립하여 사용할 수 있다
2) DI 지원
- DI를 통해 강한 결합의 문제점을 해결할 수 있다
3) 비즈니스 로직에 집중할 수 있다
- 웹 서버에서는 비즈니스 로직이 가장 중요한 구현부인데, 스프링 프레임워크가 그 외 부분을 쉽게 구현할 수 있도록 도와준다 ~ 클라이언트와 소통하는 컨트롤러, 데이터베이스와 소통하는 Spring Data JPA
4) 그 외 : AOP 지원, 테스트 코드 작성이 수월하다 등
자바의 메모리(메서드/ 스택/ 힙) 영역
메서드 영역 : static 변수, 전역 변수, 코드에서 사용되는 Class 정보 등이 올라간다. 코드에서 사용되는 class들을 로더로 읽어 클래스별로 런타임 필드데이터, 메서드 데이터 등을 분류해 저장한다.
스택 영역 : 지역 변수, 함수 등이 할당되는 LIFO 방식의 메모리
힙 영역 : new 연산자를 통해 동작이 할당된 객체가 저장되며, 가비지 컬렉션에 의해 메모리가 관리된다
ORM, JPA, Spring Data JPA
1) ORM
서버의 프로그래밍 언어와 DB 언어의 사이에서 통역사 역할을 한다
2) JPA
자바를 사용해 ORM을 이용할 수 있도록 만든 표준 명세
3) Hibernate
JPA를 실제로 구현한 프레임워크 중 가장 많이 사용하는 프레임워크, 스프링부트에서 사용중
4) Spring Data JPA
JPA를 편리하게 사용하기 위해, 스프링에서 JPA를 Wrapping했다. 예상가능하고 반복되는 코드를 대신 작성해준다
~ ex) Repository
제너릭
클래스를 선언할 때마다 타입을 결정하지 않고 객체를 생성할 때 유동적으로 재사용하기 위해 설정하는 것
다형성
서로 다른 클래스로부터 만들어진 객체지만 같은 부모의 class타입으로 이들을 관리할 수 있는(=대입될 수 있는) 성질
오버로딩 vs 오버라이딩
1) 오버로딩
같은 이름의 메서드를 여러 개 정의하는 것, 매개변수의 타입이 다르거나 개수가 달라야 한다. *반환 타입과 접근 제어자는 영향을 주지 않는다
2) 오버라이딩
상속에서 나온 개념, 상위 클래스의 메서드를 하위 클래스에서 재정의하는 것
캐시와 세션의 공통점과 차이점
공통점 : 둘 다 사용자의 데이터를 저장한다
차이점 :
- 캐시 : 캐시는 클라이언트 컴퓨터에 저장한 후 서버의 요청 시 네트워크를 타고 서버로 전달되기 때문에 보안에 취약하다
- 세션 : 세션은 서버에 저장되고 브라우저 단위로 관리하기 때문에 캐시에 비해 보안 관리가 용이하다
보안이 상대적으로 취약한 쿠키 대신 세션을 사용하면 되는데 그렇게 하지 않는 이유?
모든 정보를 세션에 저장하게 되면 서버의 메모리를 과도하게 사용하게 되어 서버에 무리가 간다
인터페이스와 추상 클래스의 특징, 공통점, 차이점
1) 인터페이스
추상 클래스의 일종, 오직 추상 메서드와 상수만 멤버로 가질 수 있다. implement 키워드를 사용하고 상속의 관계가 없는 클래스 간 서로 공통되는 로직을 구현하여 쓸 수 있고 인터페이스를 활용하면 다중 상속이 가능하다
2) 추상 클래스
추상 메서드를 하나 이상 가진 클래스로 자신의 생성자로 객체 생성이 불가능하다. 하위 클래스를 참조하여 상위 클래스의 객체를 생성해야 하고, 하위 클래스를 제어하기 위해 사용한다
- 공통점 : new 연산자로 인스턴스를 생성할 수 없다, 프로토 타입만 있는 메서드를 갖는다, 사용하기 위해 하위 클래스에서 확장/ 구현해야 한다
- 차이점 : 사용 키워드가 다르다/ 추상 클래스는 일반 메서드를 사용할 수 있지만, 인터페이스는 메서드의 선언만(추상메서드)만 가능하다
객체지향 프로그래밍
컴퓨터 프로그래밍 패러다임의 하나로, 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하는 것을 의미한다. 각 객체는 메세지를 주고 받고, 데이터를 처리할 수 있다
특징
1. 캡슐화 : 하나의 문제 해결을 위한 데이터와 메서드를 하나로 묶는 것으로 클래스 내부 정의에 대해 외부에서 볼 수 없도록 하는 것이 특징이다(은닉화)
2. 추상화 : 객체의 자세한 성질을 무시하고(숨기고) 일반적인 성질을 나타낸다. 일반적으로 클래스는 클래스로 표현할 서브 클래스(또는 객체)의 공통 성질과 행위를 일반화해 디자인되며 그로부터 생성된 객체는 자신의 고유한 성질(인스턴스)를 갖게 된다
3. 다형성 : 다형성이랑 같은 메세지에 대해 클래스에 따라 다른 행위를 하는 것을 의미한다. 일반적으로 같은 이름을 가지는 메서드에 대해 인자 개수와 데이터 타입에 따라 수행되는 행위가 달라지는 것을 말하며, 다형성을 통해 사용자는 약속된 인터페이스를 따르는 서로 다른 객체들을 같은 방식으로 사용할 수 있게 된다.
4. 상속 : 기존에 있던 클래스(부모 클래스)를 바탕으로 다른 성질을 추가해 새로운 클래스를 만들 수 있다
5. 인스턴스 : 추상화 개념 또는 클래스 객체, 컴퓨터 프로세스 등과 같은 템플릿(뭔가를 만들 때 안내하는 형식, 모형)이 실제 구현된 것
'내일배움캠프 4기 스프링 > 내배캠 TIL📘' 카테고리의 다른 글
02. 18 TIL (0) | 2023.02.20 |
---|---|
02. 17 TIL (0) | 2023.02.17 |
02. 15 TIL (0) | 2023.02.15 |
02. 14 TIL (0) | 2023.02.14 |
02. 13 TIL (0) | 2023.02.14 |