-
Notifications
You must be signed in to change notification settings - Fork 3
๐ ๋ฐฑ์๋ ์ปจ๋ฒค์
- a() ๋ฉ์๋๊ฐ ๋ด๋ถ์์ ์ฌ์ฉํ๋ b(), c() ๋ฉ์๋๋ฅผ ๋ฐ๋ก ์๋์ ์์นํ๋ค.
- static ๋ฉ์๋๋ฅผ ์๋จ์ ์์ฑํ๋ค.
class Example {
public static void hello() {
// ...
}
private static void hi() {
// ...
}
public void a() {
b();
c();
}
private void b() {
// ...
}
private void c() {
// ...
}
public void d() {
// ..
}
}
- d() ๋ฉ์๋๋ b() , c() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ง๋ง a() ๊ฐ ๋จผ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ a() ๋ฉ์๋ ์๋์ ์์นํ๋ค.
class Example {
public void a() {
b();
c();
}
private void b() {
// ...
}
private void c() {
// ...
}
public void d() {
b();
c();
}
}
import๋ฌธ ๋จ๋ฝ์ ์๋์ ์์๋ก ์ ์ธํ๋ค. ๋ธ๋ญ ์ฌ์ด์๋ ์ค๋ฐ๊ฟ์ ํ๋ค. java, javax, jakarta, org, net, com, ๊ทธ ์ธ
์ฌ์ฉ ์์
package roomescape.reservation.service;
import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import roomescape.member.domain.Member;
import roomescape.member.dto.LoginMemberInToken;
import roomescape.member.repository.MemberRepository;
import roomescape.reservation.domain.FreeReservations;
import roomescape.reservation.domain.Payment;
- Test ํ๋ ์์ํฌ๋ static import ์ฌ์ฉํ๋ค. (ex: JUnuit & AssertJ Assertions)
- ์ฌํ ๋น๋์ง ์๋ ๋ก์ปฌ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฉค๋ฒ๋ณ์์ final ์ ์ธ์ ํ๋ค.
- catch ๋ธ๋ก์์ final ์ ์ธ์ ํ๋ค.
- for-each ๋ธ๋ก์์ final ์ ์ธ์ ํ๋ค.
- ํด๋์ค ์ ์ธ, ๋ฉ์๋ ์ ์ธ์์๋ final ์ ์ธ์ ํ์ง ์๋๋ค.
public int sum(final int x, final int y) {
return x + y;
}
try {
// ๋ก์ง
} catch (final NullPointerException e) {
}
for (final int num : nums) {
System.out.println(num);
}
- ํ์ ์ถ๋ก (var)์ ์ฌ์ฉํ์ง ์๊ณ ๋ณ์ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ ์ธํ๋ค.
- ํด๋์ค๋ช ์์ด ์๋์ ์ปค๋ฐ ํ๊ทธ์ ๋ง๊ฒ ์์ฑํ๋ค.
feat | ์ ๊ท ๊ธฐ๋ฅ ๊ฐ๋ฐ |
---|---|
refactor | ๋ฆฌํํฐ๋ง |
docs | ๋ฌธ์ ์์ |
chore | ์์กด์ฑ ์ถ๊ฐ, ๊ธฐํ ์์ |
test | ํ ์คํธ ๊ด๋ จ ์์ |
fix | ๋ฒ๊ทธ ํฝ์ค |
style | ์ฝ๋ ๋ณ๊ฒฝ ์๋ ํฌ๋งทํ , ์ฃผ์ ์ ๊ฑฐ์ ๊ฐ์ ์์ |
// ์์
feat: ์ฌ์ฉ์ ๋๋ฉ์ธ ์ถ๊ฐ
- DisplayName์ ํ์์ ๋ํ ์์ ์ ํ๋ค.
- ๋ฉ์๋์ ๋ช ์ DisplayName์ ์์ด๋ก ์์ฑํ๋ค.
- ๊ตฌ์ฒด์ ์ธ ๋ฉ์๋๋ช ์ ๋ค์ด๊ฐ์ง ์๋๋ค.
@DisplayName("์ธ์ฌ๋ฅผ ํ๋ค.")
@Test
void sayHello() {
Member member = new Member();
assertThat(member.sayHello()).isEqualTo("Hello World");
}
- ํด๋์ค ์ ์ธ ํ ์ค๋ฐ๊ฟ์ ๋ฃ์ด์ค๋ค.
public class Main {
private int foo;
}
- ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํ๋๋ ์ค๋ฐ๊ฟ์ ๋ฃ์ด์ฃผ๊ณ , ์๋ ํ๋๋ ๊ธฐ์กด ๋ฐฉ์์ฒ๋ผ ์ค๋ฐ๊ฟ ์์ด ์ ์ธํ๋ค.
class Member {
private static final int MAX_VALUE = 3;
private static final int MIN_VALUE = 1;
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "email", nullable = false)
private String email;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "profile_photo", nullable = false)
private String profilePhoto;
@Enumerated(EnumType.STRING)
@Column(name = "role", nullable = false)
private Role role;
private int num1;
private int num2;
}
- ํด๋์ค & ๋ฉ์๋ ๋ ๋ฒจ์ ์ฌ์ฉ๋๋ ์ด๋ ธํ ์ด์ ๋ค์ ํด๋์ค & ๋ฉ์๋ ๊ด๋ จ๋๊ฐ ๋์์๋ก ์๋์ ๋ฐฐ์นํ๋ค.
Entity
@Getter
@NoArgs
@Table
@Entity
public class Member {
}
Service
@Getter
@Required
@Service
public class Member {
}
Test Code
@DisplayName()
@Test
void test {
}
๊ธฐ๋ณธ์ ์ผ๋ก Lombok
์ ์ฌ์ฉํ๋ ์๋ ๋ช
์๋ ๊ฒ๋ค๋ง ์ฌ์ฉํ ์ ์๋ค.
- getter
- noargs
- builder
- required
- slf4j
- ํ๋์ ๊ฐ์๊ฐ 3๊ฐ ์ดํ๋ผ๋ฉด
new
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์์ฑํ๊ณ , 4๊ฐ ์ด์์ด๋ฉดBuilder
๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
ํ๋๊ฐ 3๊ฐ ์ดํ์ผ ๊ฒฝ์ฐ
public class Main {
private int a;
private int b;
private int c;
private Main(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
}
ํ๋๊ฐ 4๊ฐ ์ด์์ผ ๊ฒฝ์ฐ
public class Main {
private int a;
private int b;
private int c;
private int d;
@Builder
private Main(int a, int b, int c, int d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
}
ํ ์ด๋ธ, ์ปฌ๋ผ๋ช ๋๋ฌธ์๋ก ํต์ผํ๋ค.
@Entity
@Table(name = "MEMBER")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member {
public static final String DEFAULT_PROFILE_IMAGE_URL = "";
@Id
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "EMAIL", nullable = false)
private String email;
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "PASSWORD", nullable = false)
private String password;
@Column(name = "PROFILE_PHOTO", nullable = false)
private String profilePhoto;
@Enumerated(EnumType.STRING)
@Column(name = "ROLE", nullable = false)
private Role role;
}
๋ค์ด๋ธ ์ฟผ๋ฆฌ
, JPQL
์ฌ์ฉ์์๋ ๋๋ฌธ์๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค
@Query("""
SELECT m
FROM Member m
WHERE m.id = :id
""")
Optional<Member> findById(@Param("id") long id);
@Schema(description = "๋ ํผ๋ฐ์ค ๋งํฌ ์์ฑ ์์ฒญ ๋ฐ๋")
public record ReferenceLinkCreateRequest(
@Schema(description = "๋ ํผ๋ฐ์ค ๋งํฌ ๊ฐ", example = "<https://www.naver.com>")
@NotBlank(message = "๋น url์ ํ์ฉํ์ง ์์ต๋๋ค.")
String url,
@Schema(description = "๋ ํผ๋ฐ์ค ๋งํฌ ๊ฐ", example = "<https://www.naver.com>")
@NotBlank(message = "๋น url์ ํ์ฉํ์ง ์์ต๋๋ค.")
String name
) {
}
@Schema(description = "๋ ํผ๋ฐ์ค ๋งํฌ ์์ฑ ์์ฒญ ๋ฐ๋")
public record ReferenceLinkCreateRequest(@Schema(description = "๋ ํผ๋ฐ์ค ๋งํฌ ๊ฐ", example = "<https://www.naver.com>")
@NotBlank(message = "๋น url์ ํ์ฉํ์ง ์์ต๋๋ค.")
String url) {
}
์ ๋ ธํ ์ด์ ์์ด ํ๋ ๊ฐฏ์๊ฐ 2๊ฐ ์ดํ๋ผ๋ฉด ์ค๋ฐ๊ฟํ์ง ์๋๋ค.
์ ๋ ธํ ์ด์ ์ด ๋ถ์ ๊ฒฝ์ฐ ์ค๋ฐ๊ฟ์ ํ๋ค. ํ๋๋ง๋ค๋ ์ค๋ฐ๊ฟ์ ํด์ค๋ค.
๋จ, ํ๋์ ์๋ ธํ ์ด์ ์ด 1๊ฐ๋ผ๋ฉด ์์ธ ์ ์ผ๋ก ์ฒซ์ค์ ์ ์ธํ๊ณ ์ค๋ฐ๊ฟ์ ํ์ง ์๋๋ค.
public record PairRoomRequest(
@Schema(description = "ํ์ด๋ฃธ ์ ๊ทผ ์ฝ๋", example = "abcdef") String accessCode,
@Schema(description = "ํ์ด๋ฃธ ์ ๊ทผ ํ ํฐ", example = "abcdef") String accessToken
) {
}
์์) Member ์ปจํธ๋กค๋ฌ
- C โ createMember
- R โ getMember, getMembers
- U โ updateMember
- D โ deleteMember
- Spring validation message ์ถ๋ ฅ ์ฉ์ด์ฑ์ ์ํจ.
- ๊ทธ ์ธ ํ์ ๊ฐ์ธต์์๋ primitive type์ ์ฌ์ฉํ๋ค. (long, int, byte, double, float ๋ฑ๋ฑ)
- ๋ถ๋ณ ๊ฐ์ฒด ๋ณํ ์ฉ์ด์ฑ
- NPE ๋ฐ์ ๋ฐฉ์ง
- ์กฐ๊ธ์ ์ฑ๋ฅ ๊ฐ์
- ์์ธ) ํ๋ ์์ํฌ ๊ฐ์ ์ฌํญ์ผ ์ ์ ์ธ (e.g, hibernate)
- ๐ ํ๋ก์ ํธ ์๊ฐ
- ๐ ์ฌ์ฉ์ ์๋๋ฆฌ์ค
- โ๏ธ ๊ธฐ๋ฅ ๋ช ์ธ์
- ๐๏ธ ํ ๊ทธ๋ผ์ด๋ ๋ฃฐ
- ๐ ๏ธ ๊ธฐ์ ์คํ
- ๐ ๋ฐฑ์๋ ์ปจ๋ฒค์
- ๐ฅ๏ธ ๋ก๊น &๋ชจ๋ํฐ๋ง
- ๐ CI&CD
- ๐ DB ๊ถํ ์ค์
- ๐งง ์คํค๋ง
- ๐จ ๋๋ฏธ ๋ฐ์ดํฐ ์ฝ์
- ๐ DB ์ฑ๋ฅ ๊ฐ์ ๊ธฐ
- ๐ DB ์ฟผ๋ฆฌ ๋ฐ ์ธ๋ฑ์ค
- ๐งTPS ๋ฐ ํฐ์บฃ & HikariCP ์ค์
- ๐๋ฌด์ค๋จ ๋ฐฐํฌ
- ๐ก ์ฌ์ฉ์ ์์ ๋ฐ๋ ์ ์ง์ ๊ฐ์ ๋ฐฉ์