데브 코스/TIL

[TIL] Day 3

마데카솔라 2021. 8. 5. 01:41
반응형

오늘부터는 하루 일과 시작 전에 할 일 정리도 할 겸 미리 작성해두고 시작하려고 한다.

추가로, 마지막으로 작성할 때 내일 해야하는 일을 리스트로 적으면 더 계획적으로 생활할 수 있을 것 같다.

 

오늘 강의는 정말.. 내가 모르는 부분만 콕콕 강의를 진행하셨다.

그래서 처음 강의가 분량이 별로 없음에도 불구하고, 약 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();

 

 

 

 

내일 할 일

  1. 7시 전에 기상
  2. 디자인패턴 정리
  3. 오늘 강의 정리
  4. 강의 듣기
  5. 멘토님과 스터디
  6. 알고리즘 1문제 풀기

 

 

 

느낀 점

아... 오늘 시간이 너무 아까웠던 하루였다.

지금 새벽 2시가 다되어가는데 진짜 시간계획대로 된 게 하나도 없었던 하루였다.

강의 시작과 끝이 기대에서 걱정으로 변했을 만큼 아직 부족함이 느껴졌다.

인터페이스.. 혼자 코딩했을 때는 신경 쓰지 않았던 부분이고 람다도 충분히 다른 방식으로 구현할 수 있기 때문에 그냥 넘겨왔었는데 뼈를 맞았다.

강의를 내 뼈와 살로 만들어 성장하기 위해 더 노력해야겠다.

 

 

반응형