[TIL] Day 3
오늘부터는 하루 일과 시작 전에 할 일 정리도 할 겸 미리 작성해두고 시작하려고 한다.
추가로, 마지막으로 작성할 때 내일 해야하는 일을 리스트로 적으면 더 계획적으로 생활할 수 있을 것 같다.
오늘 강의는 정말.. 내가 모르는 부분만 콕콕 강의를 진행하셨다.
그래서 처음 강의가 분량이 별로 없음에도 불구하고, 약 3시간..? 정도 반복해서 시청했다.
그만큼 새롭게 알게 된 정보가 많았는데 이걸 다 언제 정리할지 무섭다...
강의를 다 들으니 밤이다ㅠㅠ 시간관리에 실패한 하루.. 개선이 필요해 보인다.
일단 간단하게 요약을 해본다.
TIL
1. 인터페이스
(1) 구현부분이 없기 때문에 상속 시 구현을 강제한다.
- 추상메소드로 이루어져 구현이 되어 있지 않기 때문에, Override로 재정의를 강제한다.
(2) 공통적으로 구현하고 있는 인터페이스를 데이터 타입으로 객체를 선언할 수 있어, 실제 클래스가 무엇이냐에 따라서 다르게 동작할 수 있는 다형성을 제공한다.
(3) 의존성을 역전시켜 결합도를 낮춘다.
- 의존성 주입(DI, Dependency Injection)은 스프링을 공부한 사람은 무조건 들어봤을 것이라고 생각한다.
- 예시를 보자.
Ex) 로그인 기능을 만들 때 동작하는 코드 내부에서 결정을 하도록 맡긴다면 외부에 의존도가 높아진다.
이 때, 로그인 결정을 외부 사용자에게 맡기고 내부에서는 받아온 행동에 대해서만 작동하면 1개의 동작이 아니라 입력값에 따라 다양한 동작이 가능해진다. 이처럼 외부에 의해 다양한 능력이 수행 가능하다면 의존도가 낮은 것이다.
- 이를 의존성을 외부로부터 전달받아 의존성 주입이라고 한다.
- 이 과정에서 자연스럽게 사용자는 추상체와 결합하게 되기 때문에 결합도가 낮아진다.
https://hidelookit.tistory.com/257
[Java] 인터페이스
인터페이스란? 만약 사람이 움직이는 것을 코드로 구현할 때, 사람은 걷기 뛰기 달리기 등 다양한 동작이 가능하다. 이러한 행동들을 필요할 때마다 추가를 한다면 코드를 작성하는 입장에서 굉
hidelookit.tistory.com
2. default
(1) 추상체만 가질 수 있던 기존 인터페이스가 구현체를 가질 수 있도록 도와준다.
- 메소드 앞에 default를 붙이면 구현이 가능하다.
(2) Adapter 역할을 한다.
- 인터페이스를 상속받으면 사용하지 않는 메소드도 강제로 재정의해야 한다.
- 이를 방지하기 위해 중간에 거치는 Adapter가 필요하다.
- 하지만, 인터페이스에서 모두 default로 선언하면 이미 구현이 다 되어있기 때문에 필요한 메소드만 재정의하면 된다!
* Adapter(클래스) : 이곳에서 상속받고 기존 클래스는 Adapter를 상속받으면 필요한 기능만 재정의 할 수 있도록 해준다.
(3) 추가로 필요한 기능은 상속만으로 해결이 가능하다.
- 이미 인터페이스에서 구현이 되어있기 때문에 상속만으로 구현되어 있는 기능을 사용할 수 있다.
3. 함수형 인터페이스
이름만 들었을 때는 굉장히 어려워 보여서 거부감이 들었지만 좋은 설명 덕에 이해할 수 있었다.
- 추상 메소드가 1개만 있는 인터페이스로, static이나 default 메소드가 몇 개 있든 상관없다.
- 표시를 위해 @FunctionalInterface 어노테이션을 추가할 수 있다.
4. 인터페이스 임시 생성
- 기존처럼 따로 클래스를 만드는 방식도 있지만 익명 클래스로 간단하게 선언 후 사용할 수 있는 방법이 있다.
- 이 익명 클래스를 사용해 인터페이스의 인스턴스를 생성하고 구현을 바로 짧게 정의할 수 있다.
(추후 정리 필요 - link 달기)
5. 람다
처음 자바 공부했을 때 뭔가 손에 익지 않아서 넘어갔었는데, 오늘 람다가 어떻게 사용되는지 알 수 있었다.
위에서 살펴본 익명 메소드를 사용하면 람다로 한 줄로 똑같은 행동을 표현할 수 있다.
또한, 함수형 인터페이스일 때만 사용이 가능하다.
함수형 인터페이스를 임시로 생성할 때, 당연하게 정의되어 있는 것들이 있다.
1. 타입
2. 오버라이딩
3. public
4. 메소드에 인자 없음
위 사항들을 생략하게 되면 '타입 변수 = () {}'만 남는다.
()와 {} 사이를 '->'로 이어주면 이것이 바로 람다식이다.
Interface i = () -> System.out.println();
내일 할 일
- 7시 전에 기상
- 디자인패턴 정리
- 오늘 강의 정리
- 강의 듣기
- 멘토님과 스터디
- 알고리즘 1문제 풀기
느낀 점
아... 오늘 시간이 너무 아까웠던 하루였다.
지금 새벽 2시가 다되어가는데 진짜 시간계획대로 된 게 하나도 없었던 하루였다.
강의 시작과 끝이 기대에서 걱정으로 변했을 만큼 아직 부족함이 느껴졌다.
인터페이스.. 혼자 코딩했을 때는 신경 쓰지 않았던 부분이고 람다도 충분히 다른 방식으로 구현할 수 있기 때문에 그냥 넘겨왔었는데 뼈를 맞았다.
강의를 내 뼈와 살로 만들어 성장하기 위해 더 노력해야겠다.