interface?
- inter: 둘 사이의
- face: 면
- interface: 둘 사이의 면과 면이 만나는 것
DB interface 추상화
- 문제 상황
- DB에 대한 작업을 담당하는 자바 소스 코드가 MSSQL과 연관, 소스코드 변경시 비용 발생
- 많은 소스 코드가 변경되면서 서비스의 안정성 확보 X
- 해결 방법
- 자바 소스 코드와 DB 작업에 필요한 공통 부분을 추상화해 표준으로 만든다
- 각 DB 회사들이 이 표준에 따라 구현토록 한다
- 결과
- 자바를 기반으로 하는 소프트웨어는 추후 DB 종류 고려하지 않고 인터페이스 지키면서 구현하면, DB 변경에도 유연히 대체
인터페이스
- 상수(static final)와 추상 메서드(abstact method)의 집합
- 모든 메서드는 추상 메서드, 일반 변수를 가질 수 없음
- interface는 자바에서 한 단계 더 높은 추상화를 위해 사용
- interface는 구현 로직 X, 메소드의 input/output만 정의
- interface를 활용해 SW에 변경이 발생할 경우 소스코드에...
- 변경을 최소화
- 유지보수 비용 줄임
- 변화에 빠르게 대응
인터페이스
- 함수의 껍데기로, 함수의 구현을 강제하기 위함
- 구체적인 약속, 협업에 필수적
- "be able to" == "~할 수 있는"
- 따라서 인터페이스 네이밍은 ~able과 같이 지음
추상 클래스
- 추상 클래스를 상속받아 기능을 이용, 확장
- 상속을 강제, 실 동작은 자식 클래스에서...
- 정적 팩토리 메서드 패턴을 공부해보기
- "is a kind of" == "~의 한 종류"
문법 차이
- 인터페이스 상속은 "implements"
- 추상 클래스 상속은 "extends"
차이점
1. 사용 의도 차이점
- 추상 클래스: "IS-A", "~이다"
- 인터페이스: "HAS-A", "~을 할 수 있는"
- 인터페이스는 IS-A 관계로도 볼수 있다.
- Inheritance의 성격이 강하면 is-a
- Composition의 성격이 강하면 has-a
2. 공통된 기능 사용 여부
- 인터페이스를 사용해서 기본 틀을 구성한다면 공통으로 필요한 기능들도 모든 클래스에서 오버라이딩 해야함
전략 패턴
- 랜덤한 값을 테스트하기 위해 인터페이스로 분리, 테스트 가능한 구조로 변경
- 구조
- Context: 갖고 있는 전략 콘크리트에 따라 행동이 달라짐
- Strategy: 제공하는 알고리즘에 대한 공통의 연산들을 interface로 정의
- Strategy Concrete Class: 실제 알고리즘
- 장점
- 상속을 사용하지 않음
- if문의 제거를 가능하게 한다
- 구현의 선택이 가능해진다
- 단점
- 객체 수 증가
- 서로 다른 전략을 이해해야 함
응집도와 결합도
- 응집도: 모듈 내부의 기능적인 집중 정도
- 결합도: 모듈과 모듈간의 상호 의존 정도
- 독립적인 모듈이 되기 위해서는 응집도는 강하고, 결합도는 약해야 한다
getOrDefault()
- Map에서 get() 메서드를 대신해 getOrDefault() 메서드를 사용
- Map에서 value값이 0인 친구들을 관리해줄 필요가 없어진다
클래스 이름에서 의도가 나타났다면, 굳이 메서드에서 의도 또 보일 필요 X
- LottoNumberGenerator 클래스 내의...
- createLottoNumber (X)
- create (O)