Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- buffer
- 메모리구조
- 알기쉬운 알고리즘
- datastructure
- C programming
- Selection Sorting
- 이스케이프 문자
- JSON
- s
- stream
- 윤성우의 열혈 자료구조
- list 컬렉션
- 윤성우 열혈자료구조
- Algorithm
- Stack
- 혼자 공부하는 C언어
- insertion sort
- R
- ㅅ
- coding test
- Graph
- 이것이 자바다
- Serialization
- C 언어 코딩 도장
Archives
- Today
- Total
Engineering Note
[Java] default 접근제어자와 테스트코드 패키지 본문
문제 상황
도메인 주도 개발로 데이터의 불변성을 보장하기 위해 setter사용을 지양하는 방향으로 개발.
하지만 JPA양방향 연관관계 선언시 실수를 방지하기 위해 연관관계메서드를 선언하는데 setter가 있어야 현재 엔티티를 세팅하면서 반대편 참조 엔티티의 값을 동시에 값을 세팅할 수 있었다.
그래서 package-private 의미의 (default) 접근제어자로 setter용 assignMember메서드를 만들어주었다.(Java에서 접근제어자를 선언하지 않으면 default 접근제어가 선언된다.)
그리고 동작여부를 테스트 코드에서 setter를 사용해보았는데 동작했다.
원인 분석
Java는 package 선언으로 패키지를 판단하므로, src/main과 src/test가 달라도 package 선언이 같으면 같은 패키지.
나의 상황에서 Cart Entity의 assignMember() 선언
package com.shop.domain.cart;
public class Cart {
void assignMember(Member member) {
this.member = member;
}
}
package com.shop.domain.category;
@SpringBootTest
@ActiveProfiles("local")
class CategoryRepositoryTest {
@Test
@DisplayName("장바구니 회원 유니크 제약 조건 테스트")
void 장바구니_회원_유니크_테스트() {
MemberFormDto memberFormDto = MemberFormDto.builder()
.name("테스트")
.email("test@test.com")
.address("Seoul")
.password("123456")
.role(Role.USER)
.build();
Member member = Member.createMember(memberFormDto);
Cart cart = Cart.createCart(member);
cart.assignMember(member);//사용가능
}
}
정리
기준판단
| 물리적 디렉토리 | src/main vs src/test → 다름 |
| 소스 루트 기준 경로 | com/shop/domain/cart → 같음 |
| package 선언 | package com.shop.domain.cart; → 같음 ✅ |
Java는 package 선언으로 패키지를 판단하므로, src/main과 src/test가 달라도 package 선언이 같으면 같은 패키지로 인식하므로 srt/main 쪽에서 선언한 default 접근제어자 메서드는 srt/test의 같은 패키지경로에서는 사용할 수 있다.
'Programming Language > Java' 카테고리의 다른 글
| [Java] 깊은복사와 얕은복사 그리고 방어적복사 (0) | 2026.01.13 |
|---|---|
| [Java] Optional()에서 반환타입에서 .get()이 안좋은 이유와 예외처리를 하는 이유 (0) | 2026.01.09 |
| [Java] 동일성(Identity)과 동등성(Equality) (0) | 2025.12.23 |
| [Java] ArrayList 초기화 (0) | 2025.12.15 |
| [Java] Stream API 실전 예제(Entity/DTO 변환 과정: forEach -> map 리팩토링) (0) | 2025.10.04 |
Comments