분류 전체보기120 스프링 - 스프링과 객체지향 설계 feat. 다형성, SOLID 들어가기에 앞서... 스프링과 객체지향 설계를 제대로 이해하기 위해서 필요한 2가지 다형성 객체지향 설계의 5가지 원칙 (SOLID) 1. 다형성 스프링의 핵심 스프링은 자바 기반의 프레임워크이다. 자바 언어의 가장 큰 특징은 객체 지향 언어라는 점이다. 스프링은 객체지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다. 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크이다. 객체지향 특징 추상화 캡슐화 상속 다형성 객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 또한 객체지향 프로그래밍은 프로그램을 유연하고 변경.. 2022. 4. 13. JPA - 값 타입과 불변 객체 1. 값 타입과 불변 객체 왜 복잡하게 값 타입을 나눴을까? 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 개발자는 Entity에 대해서 신경을 많이 쓰지만 값에 대해서는 크게 신경쓰지 않는다. 그 이유는 값 타입이 안전하게 설계가 되있기 때문이다. 값 타입 공유 참조 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험하다. 부작용(side effect) 발생 임베디드 타입을 여러 엔티티에서 공유할 시 부작용 예) main{ Address address = new Address("city", "street", "1000"); Member member1 = new Member(); member.setUsername(.. 2022. 4. 12. JPA - 기본값 타입과 임베디드 타입 1. 기본값 타입 이번내용은 JAVA의 데이터 타입에 대한 간단한 내용입니다. JPA의 데이터 타입 분류 JPA 최상위 데이터를 크게 2가지로 분류한다. 1. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 2. 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 (기본적으로 공유가 되지않거나 되더라도 불변함으로 개발자가 안전하게 마음껏 사용할 수 있다.) • 자바 기본 타입(int, double) • 래퍼 클래스(Int.. 2022. 4. 12. JPA - 영속성 전이(CASCADE)와 고아 객체 1. 영속성 전이(CASCADE) 영속성 전이는 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들도 싶을 때 사용한다. ex) 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장 ※ 참고로 영속성 전이(CASCADE)는 연관관계나, 즉시로딩(지연로딩)과 전혀 관계가 없다. ※ 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함 을 제공할 뿐이다. 영속성 전이: 저장 public class Parent{ ... @OneToMany(mappyBy = "parent", cascade = CascadeType.ALL) private List childList = new ArrayList(); public void addChild(child child){ childList.add(.. 2022. 4. 11. JPA - 즉시 로딩과 지연 로딩 1. 지연 로딩 (LAZY) Member를 조회할 때 Team도 함께 조회해야 할까? 단순히 member 정보만 사용하는 비즈니스 로직 println(member.getName()); 지연 로딩 LAZY을 사용해서 프록시로 조회 @Entity public class Member { @ManyToOne(fetch = FetchType.LAZY) //** @JoinColumn(name = "TEAM_ID") private Team team; ... } 이렇게하면 Member는 DB에서 가져오고 Team은 프록시 객체로 가져온다 된다. 그리고 Team을 사용하는 시점에 DB에서 가져온다. ※ getTeam()에서는 Team을 가져오지 않고, Team의 필드나 메서드를 터치했을때 초기화된다. 2. 즉시 로딩 (.. 2022. 4. 11. 이전 1 ··· 4 5 6 7 8 9 10 ··· 24 다음