이전 글에서 Autowired에 대한 포스팅을 했으니 읽고 오시면 이해하시기 쉽습니다. 굳이 읽지 않으시고 바로 보셔도 무방합니다. [Spring] @Autowired - 의존성 자동주입 Spring 프레임워크에서 @Autowired 어노테이션은 자동 의존성 주입을 강력한 도구로 사용됩니다. @Autowired을 통해 Spring은 Application Context에서 필요한 Bean을 찾아서 해당 필드에 주입합니다. 이를 통해 muscleking3426.tistory.com Spring에서 @Autowired 어노테이션은 일반적으로 Spring 컨테이너가 자동으로 빈을 주입할 때 사용됩니다. 그러나 때로는 특별한 경우에 수동으로 빈을 등록하고 주입할 때가 있습니다. 이번에는 @Autowired 어노테..
분류 전체보기
Spring 프레임워크에서 @Autowired 어노테이션은 자동 의존성 주입을 강력한 도구로 사용됩니다. @Autowired을 통해 Spring은 Application Context에서 필요한 Bean을 찾아서 해당 필드에 주입합니다. 이를 통해 코드의 가독성과 유지보수성을 높이고, 의존성 주입에 대한 번거로움을 줄일 수 있습니다. @AutoWired 개념 생성자, 필드, 메서드 등의 위치에 사용됩니다. 주로 의존성을 주입받아야 할 대상에 어노테이션을 적용하며 Spring에 해당 객체를 주입하도록 지시합니다. 1. 생성자 주입 @Service public class MyService { private final MyRepository myRepository; @Autowired public MyServi..
이번 포스팅에서는 Setter 메서드를 사용한 의존성 주입에 대한 규칙과 해당 방식을 활용한 코드 예제를 살펴보겠습니다. 또한, 세터 메서드를 이용한 의존성 주입을 설정하는 코드와 생성자 방식의 장단점에 대한 비교도 진행하겠습니다. Setter 메서드 규칙 Setter 메서드는 다음과 같은 규칙을 따릅니다: 메서드 이름이 "set"으로 시작 "set" 뒤 첫 글자는 대문자로 시작 파라미터는 1개 리턴 타입은 void 코드 예제: 세터 메서드를 이용한 의존 객체 주입 public class MemberInfoPrinter { private MemberDao memberDao; private MemberPrinter printer; public void printMemberInfo(String email) ..
이번에는 스프링 프레임워크에서 생성자 주입을 활용한 의존성 주입에 대해 알아보겠습니다. 생성자 주입은 스프링의 강력한 기능 중 하나로, 객체 간의 의존성을 외부에서 주입하는 방식을 제공합니다. 1. 생성자 주입이란? 생성자 주입은 객체를 생성할 때 외부에서 의존하는 객체를 주입하는 방식입니다. 이는 객체 간의 결합도를 낮추고 코드의 유연성을 높이는 데에 큰 도움이 됩니다. public class MemberRegisterService { private MemberDao memberDao; // 생성자를 통해 의존 객체 주입 public MemberRegisterService(MemberDao memberDao) { this.memberDao = memberDao; } // ... 이하 생략 } 2. 스프..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgRsua%2FbtsDIAijGZX%2FkNfVX8CYNd8GiUdUlLs380%2Fimg.png)
소개: 여의도 러닝 크루에서는 나홀로 산다 방송 출연 이후 많은 사람들이 찾아와서 크루에 가입하게 되었습니다. 이에 따라 크루 운영진은 회원들의 출석과 관리에 어려움을 겪게 되었습니다. 그래서 출석관리를 보다 간편하게 하기 위해 특별히 개발한 출석관리 시스템에 대해 소개하려 합니다. 시스템 기능: 기능은 크게 사용자 유형별 3가지로 나뉠 수 있습니다. 정회원 기능: 출석조회: 출석 데이터를 건별로 조회할 수 있습니다. 해당 월, 러닝유형별, 도우미 유형별로 달린 횟수를 확인할 수 있습니다. 출석체크: 정기런 또는 번개런을 선택하여 출석을 체크할 수 있습니다. 정기런 선택 시, 출석 당일 인증코드를 입력해야 하며, 번개런 선택 시, 출석 당일 번개런 호스트 명을 입력할 수 있습니다. 이름수정: 사용자의 이..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboQJWg%2Fbtr7StBAjb2%2FMbK7XOmqTmx9w3OCKTnj0k%2Fimg.png)
양방향 매핑 Member 엔티티의 양방향 매핑은 단방향과 동일하다. @Entity public class Member{ @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; //... } Team 엔티티는 컬렉션을 추가해야 한다. @Entity public class Team{ @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "team") List members = new Arr..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgXq2b%2Fbtr719Px0gp%2FMUlzlbI5uKb8tdyaIVMnBk%2Fimg.png)
연관관계의 필요성 '객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.' - 조영호 님의 '객체지향의 사실과 오해' 라는 책에서. [예제] 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. [객체, 테이블 모델링] 연관관계가 없는 객체 [객체를 테이블에 맞춰 모델링 하는 코드] 참조 대신에 외래 키를 그대로 사용한다. @Entity public class Member{ @Id @GeneratedValue private Long id; @Column(name ="USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; // 이하 생략.. } @Entity publi..
기본 키 매핑 기본 키 매핑 어노테이션 @Id @GeneratedValue @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; 기본 키 매핑방법에는 직접 할당 방법과 자동 생성 방법이 있다. 직접 할당 방법은 @Id만 사용하고, 자동 생성 방법은 @GeneratedValue를 사용한다. 옵션은 다음과 같다. 옵션 - IDENTITY 데이터베이스에 위임한다.(MYSQL) 옵션 - SEQUENCE 데이터베이스에 시퀀스 오브젝트를 사용한다.(ORACLE) 해당 옵션을 사용하려면 @SequenceGenerator 가 필요하다. 옵션 - TABLE 키 생성용 테이블을 사용하고, DB에서 사용한다. 해당 옵션을 사용하려면 @TableGenera..
엔티티 매핑 1) 객체와 테이블 매핑 : @Entity, @Table 2) 필드와 컬럼 매핑 : @Column 3) 기본 키 매핑 : @Id 4) 연관관계 매핑 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하고, 엔티티라고 부른다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수다. [주의할 점] 1) 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) 2) final 클래스, enum, interface, inuuer 클래스를 사용해선 안된다. 3) 저장할 필드에 final 키워드를 사용해선 안된다. 속성 - name JPA에서 사용할 엔티티 이름을 지정한다. 기본값은 클래스 이름을..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFod3X%2Fbtr0AyRfkUP%2F20BaF1GaVM16JA5t58sfN1%2Fimg.png)
엔티티 수정하기 - 변경감지 EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransaction(); transaction.begin(); // 트랜잭션 start //영속 엔터티 조회 Member memberA = em.find(Member.class, "memberA"); //영속 엔터티 데이터 수정 memberA.setUsername("hi"); memberA.setAge(10); //JPA는 업데이트 함수가 따로 있을까? transaction.commit(); // 트랜잭션 commit 변경 감지 (Dirty Checking) 1. flush 함수 호출 2. 엔티티와 스냅샷 비교 JPA는 영속 ..