백엔드 데브코스 TIL 03일차

Inchang Choi·2022년 3월 24일
0
post-thumbnail

학습목표

강의를 들으며 내가 알고 있는 내용을 점검하고,

새로 배운 내용을 정리하며,

궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.


TIL 03일차

학습목표

강의를 들으며 내가 알고 있는 내용을 점검하고,

새로 배운 내용을 정리하며,

궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.


인터페이스

인터페이스의 기능과 활용법에 대해 알아봅시다.

인터페이스의 특징

  • 구현을 강제하는 기능입니다. 인터페이스에서 정의된 추상 메서드는 구현하지 않으면 에러가 납니다.
  • 다형성을 제공합니다
  • 의존성을 역전 시켜 결합도를 낮추는 효과가 있습니다.
  • 추상 메서드와 상수로만 이루어져 있습니다.
  • 구현체가 없기 때문에 단독으로 인스턴스를 생성 할 수 없습니다.
  • 클래스는 다중 상속이 불가능하지만 인터페이스는 가능합니다.

원래 인터페이스는 구현체를 가질 수 없지만,
자바 8부터는 디폴트 메서드를 통해 구현체를 가질 수 있습니다.

default method

인터페이스에 새로운 메서드가 추가되면 인터페이스를 구현하는 모든 클래스들이 해당 메서드를 구현해야 하는 문제점이 있었는데, default 메서드로 선언하면 이런 문제점이 사라집니다.

이러한 변화를 통해서

  • 사용하고 싶은 메서드만 쓰기 위해 중간에 Adapter를 만들어 인터페이스를 구현한 후, 이를 상속 받아 사용 했었습니다. 그러나 이러한 방식은 이미 다른 클래스를 상속 받았다면 사용 할 수 없는 문제점을 해결할 수 있습니다.
  • 중복된 코드를 줄일 수 있습니다.

그러나 인터페이스가 다중 상속이 가능하기 때문에 같은 default 메서드로 정의한 여러개의 인터페이스를 한 클래스가 다중상속을 하게 되면 충돌이 발생합니다.

@Override
public String sayHello() {
		return HelloWorld.super.sayHello();
}

그렇기 때문에 여러 인터페이스 중 어떤 메서드를 사용할 지 명시적으로 구현을 해야합니다.

static method

인터페이스의 자바 8에서 또 하나의 변화가 static method입니다.

정적 메서드는

interface.method

이와 같은 방법으로 메서드를 호출하며 정적 메서드는 프로그램 시작과 동시에 생성되기 때문에 다시 재정의(Override)할 수 없습니다.

또 정적 메서드는 하위 클래스가 동일한 이름의 메서드를 가질 수 있습니다.

이러한 정적 메서드를 통해 기존에는 특정 인터페이스의 메서드를 사용하기 위하여 별도의 클래스를 만들어야 했으나, 그럴 필요가 없게 되었습니다.

Functional Interface

지금까지 우리는 클래스에 종속된 함수를 메서드라고 불렀습니다.

이러한 메서드 중에서 추상 메서드를 하나만 갖는 메서드를 Funtional Interface라고 합니다.

default나 static 메서드는 여러가지 있어도 상관없습니다.

  • 함수형 인터페이스의 종류

함수형 인터페이스를 사용할 때는 주로 @FuntionalInterface 어노테이션을 함께 작성하여 인터페이스 검증과 유지보수를 위해 붙여줍니다.

익명 클래스

익명 클래스는 이름이 없는 클래스를 뜻 합니다.

이름이 없기 때문에 클래스를 정의 후 바로 인스턴스를 생성해야 합니다.

일반적으로는

  1. 프로그램 내에서 단발성으로 한번만 사용 되어야 하는 객체
  2. 재사용성이 없고 확장성을 활용하는 것이 유지보수에서 불리한 경우

일 때 익명 클래스의 활용을 고민해 볼 수 있습니다.

익명 클래스를 만들기 위해서는 하나의 클래스를 상속하거나 또는 하나의 인터페이스를 구현해야 합니다.

Lambda Expression

익명 메소드를 사용해서 간결한 인터페이스 인스턴스를 생성하는 방법입니다. Funtional Interface로만 사용할 수 있으며 익명 클래스와 같이 한 번만 사용할 수 있습니다.

함수형 프로그래밍의 개념을 기반으로 출력값이 다시 매개변수로 전달 될 수 있고 메소드의 결과 값으로 반환 될 수 도 있습니다.

(parameter) -> {function main}

이러한 람다식은 코드를 간결하게 만들어 가독성을 향상 시키고, 코딩 하는 시간을 빠르게 줄일 수 있습니다.

Method Reference

method reference는 람다 표현식이 하나의 메소드 만을 호출 하는 경우에 해당 람다 표현식에서 불필요한 매개변수를 제거하고 사용할 수 있게 해줍니다.

ClassName::methodName
또는
varName::methodName

형태로 사용됩니다.

이는 입력 값을 변경하지 말라는 표현 방식으로 쓰일 수도 있으며 개발자의 개입을 차단함으로 안정성을 얻을 수 있습니다.

profile
always positive

0개의 댓글