
๐ ์ฝ๋ ์ปจ๋ฒค์ ์ด ๋ญ์ผ?

๐ ๊ผญ ํด์ผ ๋จ?
-> 1์ธ ๊ฐ๋ฐ์ ๊ฒฝ์ฐ๋ ์๊ด์ด ์์ด์
-> ํ์ง๋ง ์ฐ๋ฆฌ๋ ๋ณดํต ํ์
์ ํตํด ๊ฐ๋ฐ์ ์งํํ๊ธฐ ๋๋ฌธ์, ๋จ์ด ์ง ์ฝ๋๋ฅผ ๋ด๊ฐ ์ฝ์ด์ผ ํ ๋๋ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ ์ ํด์ง ์ปจ๋ฒค์
์ด ์๋ค๋ฉด ์ถ๊ฐ์ ์ธ ์์ฌ์ํต, ์์ ์๊ฐ์ ์ฆ๊ฐ ๋ฑ ๋ง์ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์์
โ ๏ธ ์ค๋ฐ๊ฟ, ๋ค์ฌ์ฐ๊ธฐ, ์ค๊ดํธ ์์ ๋ฑ IDE๊ฐ ์๋์ผ๋ก ์ ํด์ฃผ๋ ๋ถ๋ถ์ ์๋ต
๋ณ์๋ช , ํด๋์ค๋ช , ๋ฉ์๋๋ช ๋ฑ์๋ ์์ด์ ์ซ์๋ง์ ์ฌ์ฉํ๋ค. ์์์๋ ๋จ์ด ์ฌ์ด์ ๊ตฌ๋ถ์ ์ํ์ฌ ์ธ๋์ค์ฝ์ด(_)๋ฅผ ์ฌ์ฉํ๋ค.
// ์ฌ๋ฐ๋ฅธ ์:
// camelCase ์ ์ฉํ๋ค๊ณ ๊ฐ์
public class CodingMinsoo { }
public void doSomethingMethod() { }
int userAge = 25;
String firstName = "Kim";
public static final int MAX_USER_COUNT = 100;
public static final String KINGGOD_URL = "www.google.com"
// ์๋ชป๋ ์:
public class missileLaunch์์คํ
๋ฌด { } // ํ๊ธ ์ฌ์ฉ
int ๋ช์ด = 25; // ํ๊ธ ์ฌ์ฉ
String ๊ฑฐ์ด๋ฐ๊น์น๋๊บผ = "Kim"; // ํ๊ธ ์ฌ์ฉ
public static final int MaxUserCount = 100; // ์ธ๋์ค์ฝ์ด ๋ฏธ์ฌ์ฉ (PascalCase ์ฌ์ฉ)
public static final String kingGodUrl = "www.google.com" // ์นด๋ฉ ์ผ์ด์ค ์ฌ์ฉ
์๋ณ์์ ์ด๋ฆ์ ํ๊ธ ๋ฐ์์ ์์ด๋ก ์ฎ๊ฒจ์ ํ๊ธฐํ์ง ์๋๋ค. ํ๊ตญ์ด ๊ณ ์ ๋ช ์ฌ๋ ์์ธ์ด๋ค.
// ์ฌ๋ฐ๋ฅธ ์
String address = "์ถฉ์ฒญ๋จ๋ ์ฒ์์"
// ์๋ชป๋ ์
String zipzuso = "์ถฉ์ฒญ๋จ๋ ์ฒ์์"
package com.example.board
package com.example.member
ํด๋์ค ์ด๋ฆ์ ํ์ค์นผ ์ผ์ด์ค๋ฅผ ์ ์ฉํ๋ค, ๊ทธ๋ฆฌ๊ณ ๋ช ์ฌ๋ ๋ช ์ฌ์ ๋ก ์ง๋๋ค.
public class MemberService {}
public class MemberReport {}
๋ฉ์๋์ ์ด๋ฆ์๋ ์ฒซ ๋ฒ์งธ ๋จ์ด๋ฅผ ์๋ฌธ์๋ก ์์ฑํ๊ณ , ์ด์ด์ง๋ ๋จ์ด์ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์์ฑํ๋ ์๋ฌธ์ ์นด๋ฉํ๊ธฐ๋ฒ(Lower camel case)๋ฅผ ์ฌ์ฉํ๋ค.
ํ
์คํธ ํด๋์ค์ ๋ฉ์๋ ์ด๋ฆ์์๋ ์ธ๋์ค์ฝ์ด๋ฅผ ํ์ฉํ๋ค
isValidToken()
is_valid_token_test()
๋ฉ์๋๋ช ์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋์ฌ๋ก ์์ํ๋ค.
๋ค๋ฅธ ํ์ ์ผ๋ก ์ ํํ๋ ๋ฉ์๋๋ ๋น๋ ํจํด์ ๊ตฌํํ ํด๋์ค์ ๋ฉ์๋์๋ ์ ์น์ฌ๋ฅผ ์ธ ์ ์๋ค.
bringMyMoney()
toString()
// ๋น๋ ํจํด ์์
public class CarBuilder {
private String model;
private String color;
// ๋ชจ๋ธ์ ์ค์ ํ๋ ๋ฉ์๋
public CarBuilder withModel(String model) {
this.model = model;
return this;
}
// ์์์ ์ค์ ํ๋ ๋ฉ์๋
public CarBuilder withColor(String color) {
this.color = color;
return this;
}
// ์๋์ฐจ๋ฅผ ์์ฑํ๋ ๋ฉ์๋
public Car build() {
return new Car(model, color);
}
}
์ํ๋ฅผ ๊ฐ์ง์ง ์๋ ์๋ฃํ์ด๋ฉด์ static final๋ก ์ ์ธ๋์ด ์๋ ํ๋์ผ ๋๋ฅผ ์์๋ก ๊ฐ์ฃผํ๋ค.
์์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ฑํ๋ฉฐ, ๋ณตํฉ์ด๋ ์ธ๋์ค์ฝ์ด(_)๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๋ค.
public final String SUCCESS_LOGIN = "๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์์ต๋๋ค.";
๋ณดํต ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ ์ฒด ์๋ฌธ์๋ก ์ ์ธํ๋ค.
int phonenumber = 01012345678
ํ์ง๋ง ์์๊ฐ ์๋ ํด๋์ค์ ๋ฉค๋ฒ๋ณ์/์ง์ญ๋ณ์/๋ฉ์๋ ํ๋ผ๋ฏธํฐ์๋ ์๋ฌธ์ ์นด๋ฉํ๊ธฐ๋ฒ(Lower camel case)์ ์ฌ์ฉํ๋ค.
public class Car {
private String carModel;
private int carYear;
๋ฉ์๋ ๋ธ๋ญ ๋ฒ์ ์ด์์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ ๋ณ์์๋ 1๊ธ์๋ก ๋ ์ด๋ฆ์ ์ฐ์ง ์๋๋ค.
๋ฐ๋ณต๋ฌธ์ ์ธ๋ฑ์ค๋ ๋๋ค ํํ์์ ํ๋ผ๋ฏธํฐ ๋ฑ ์งง์ ๋ฒ์์ ์์ ๋ณ์์๋ ๊ด๋ก์ ์ผ๋ก 1๊ธ์ ๋ณ์๋ช ์ ์ฌ์ฉํ ์ ์๋ค.
public class UserManager {
private String userName;
// ๋ธ๋ญ ๋ฒ์ ์ด์์ ๋ณ์์ด๋ฏ๋ก ๋ช
ํํ ์ด๋ฆ ์ฌ์ฉ
private int userAge;
public void setUserName(String userName) {
// ๋ฉ์๋ ํ๋ผ๋ฏธํฐ๋ ๋ช
ํํ ์ด๋ฆ ์ฌ์ฉ
this.userName = userName;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
}
public void printNumbers() {
for (int i = 0; i < 10; i++) {
// ๋ฐ๋ณต๋ฌธ์ ์ธ๋ฑ์ค๋ ๊ด๋ก์ ์ผ๋ก 'i'๋ฅผ ์ฌ์ฉ
System.out.println(i);
}
}
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(n -> System.out.println(n));
// ๋๋ค ํํ์์ ํ๋ผ๋ฏธํฐ๋ 'n'๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ด๋ฆ ์ฌ์ฉ
ํด๋์ค๋ฅผ importํ ๋๋ ์์ผ๋์นด๋(*) ์์ด ๋ชจ๋ ํด๋์ค๋ช ์ ๋ค ์ด๋ค.
static import์์๋ ์์ผ๋์นด๋๋ฅผ ํ์ฉํ๋ค.
-> ๋ณดํต ํด๋์ค๋ฅผ ๋จผ์ ์ ๋ ฅํ๊ณ InteliJ์ Import Class ๋จ์ถํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์ ์ง์ผ์ง๋ ํธ
// ๋์ ์
import java.util.*;
// ์ข์ ์
import java.util.List;
import java.util.ArrayList;
ํด๋์ค, ์ธํฐํ์ด์ค, ๋ฉ์๋, ์์ฑ์์ ๋ถ๋ ์ด๋ ธํ ์ด์ ์ ์ ์ธ ํ ์์ค์ ์ฌ์ฉํ๋ค.
์ด ์์น์์๋ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ์ด๋
ธํ
์ด์
1๊ฐ๋ ๊ฐ์ ์ค์ ์ ์ธํ ์ ์๋ค.
-> ๊ทผ๋ฐ ๊ทธ๋ฅ ๋ฌด์กฐ๊ฑด ์ด๋
ธํ
์ด์
์ ์ธํ์ผ๋ฉด ์ค๋ฐ๊ฟํ๋๊ฒ ๊ตญ๋ฃฐ์ ใ
ใฑ
@GetMapping("/api/board")
public void findById() {}
ํ๋ก์ ํธ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ๋ํ ์ปจ๋ฒค์ ์ ์ผ์ข ์ด๋ค.
ํฌ๊ฒ ๊ณ์ธตํ(Layered) ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ํจํค์งํ(Feature-based) ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์๋ค.
// ๊ณ์ธตํ
com
โโโ projectname
โโโ controller
โ โโโ UserController.java
โ โโโ ProductController.java
โโโ service
โ โโโ UserService.java
โ โโโ ProductService.java
โโโ repository
โ โโโ UserRepository.java
โ โโโ ProductRepository.java
โโโ domain
โ โโโ User.java
โ โโโ Product.java
โโโ config
โโโ WebConfig.java
โโโ AppConfig.java
๊ณ์ธตํ์ ํ๋์ ํ๋ก์ ํธ๋ฅผ "์ญํ ์ ๋ฐ๋ผ ๋๋ ๊ฒ" ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
controller ํจํค์ง์๋ ํ๋ก์ ํธ ๋ด๋ถ ๋๋ฉ์ธ์ ๋ชจ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ชจ์๋๊ณ , service ํจํค์ง์๋ ๋ชจ๋ ์๋น์ค๋ฅผ ๋ชจ์๋๊ณ ,
repository ํจํค์ง์๋ ...
// ํจํค์งํ
com
โโโ projectname
โโโ user
โ โโโ UserController.java
โ โโโ UserService.java
โ โโโ UserRepository.java
โ โโโ User.java
โโโ product
โ โโโ ProductController.java
โ โโโ ProductService.java
โ โโโ ProductRepository.java
โ โโโ Product.java
โโโ order
โโโ OrderController.java
โโโ OrderService.java
โโโ OrderRepository.java
โโโ Order.java
ํจํค์งํ์ ํ๋์ ํ๋ก์ ํธ๋ฅผ "๋๋ฉ์ธ(ํน์ ์ํฐํฐ)์ ๋ฐ๋ผ ๋๋ ๊ฒ" ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํ๋ก์ ํธ ๊ตฌ์ฑ ์์๋ค์ ํจํค์ง๋ก ๋ง๋ค๊ณ ๊ทธ ์์ ๊ธฐ๋ฅ์ ๋ฃ์ด ๋๋๋ค.
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ์ ํ ๊ธฐ์ค์ ํ๋ก์ ํธ์ ๊ท๋ชจ, ํ ์ ํธ๋, ์ ์ง๋ณด์ ์ฉ์ด์ฑ ๋ฑ์ด ์๋ค. ๋ณดํต ๊ณ์ธตํ์ ๋๊ท๋ชจ ํ์ ์ ์ ํฉํ๊ณ , ํจํค์งํ์ ์ค์๊ท๋ชจ๋ ๋ง์ดํฌ๋ก ์ํคํ ์ณ์ ์ ํฉํ๋ค.
์ฝ๋ ์ปจ๋ฒค์
์ ํ์
์์ ์ ํ์ด ์๋ ํ์์ด๋ค~~
๊ธ๋ก ์ ๋ฆฌํด๋์ผ๋ ๋๋ฌด ๋ง๊ณ ๋ณต์กํด๋ณด์ด์ง๋ง ์ฝ๋๋ฅผ ๋ง์ด ์์ฑํ๋ค๋ณด๋ฉด ์ ์ ๋ก ๋ชธ์ ๋ฐฐ๊ฒ ๋์ด ์์ผ๋ ๊ทธ๋ ๊ฒ ๊ฑฑ์ ํ์ง ๋ง์~!๐
์ฐธ๊ณ :
๋๊ธฐ์
, ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ฝ๋ ์ปจ๋ฒค์
๋ค
๋ค์ด๋ฒ
์ค๋ผํด
์ปจ๋ฒค์
์ค์๋ฅผ ๋์์ฃผ๋ extension๋ค
Prettier <- ์ต์ํ๋ค ๊ทธ์ตธ
Linter