스프링 실습 1

손원진·2023년 3월 17일
0

[SPRING]

목록 보기
8/15

의존성 주입, 제어의 역전, 다형성 나에겐 너무 낯선 단어들이다..
인터페이스를 생성하고, 구현을 하는 기능을 따로 만든다?
다형성 - 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);
    }
}
profile
매일 한 걸음

0개의 댓글