의존성 주입, 제어의 역전, 다형성 나에겐 너무 낯선 단어들이다..
인터페이스를 생성하고, 구현을 하는 기능을 따로 만든다?
다형성 - overriding overloading 은 알지만 이것을 왜 사용하는지는 알지 못한다.
코드를 쳐가면서 배우자.
SPRING을 알고 좋은 객체지향 설계의 원칙을 알면 된다. SPRING은 좋은 객체지향 설계를 위해 만들어진 것이다.
SPR (단일 책임 원칙 Simple responsibility principle)
OCP (Open/ close) 개방 폐쇄의 원칙
(역할을 확장할 수 있으나 기존에 있는 코드를 변경하면 안된다?)
LSP(Liskov substitution) 리스코프 치환의 원칙
DIP(dependency inversion) 의존관계 역전의 원칙
프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다.,
ISP(interface segregation)
인터페이스 여러개가 범용인터페이스 한개보다 낫다.
코드로 한번 간단하게 작성해보았다.
jdk 11.0.17 설치 후에 intelliJ로 강의를 보며 개발 코드 작성
package hello.core.member;
//등급을 분리하기 위해 enum생성
public enum Grade {
Basic,
Vip
}
//member클래스를 생성 데이터를 임시로 저장하고 꺼내올 수 있도록 진행
package hello.core.member;
public class Member {
private Long id;
private String name;
private Grade grade;
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public Grade getGrade() {
return grade;
}
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
package hello.core.member;
//역할 회원 저장소
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
//역할 회원 서비스
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
// 구현 회원저장 (저장하고, 아이디를 사용해서 회원 조회가 가능하도록 진행)
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new HashMap<>();
@Override
public void save(Member member) {
store.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
return store.get(memberId);
}
}
//구현 멤버정보를 넣고, 아이디로 멤버정보를 가져옴
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository = new MemoryMemberRepository();
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}