λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[μš©μ–΄][Java] ν”„λ‘œκ·Έλž¨μ˜ λͺ…ν™•μ„± (Clarity)

좜처

ChatGPT


ν”„λ‘œκ·Έλž¨μ˜ λͺ…ν™•μ„±(Clarity)은 μ½”λ“œμ˜ 가독성과 이해도λ₯Ό λ†’μ΄λŠ” 데 쀑점을 두고, μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ 맀우 μ€‘μš”ν•œ κ°œλ…μ΄λ‹€. λͺ…확성을 μ½”λ“œλ₯Ό 읽고 μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄, λ‹€λ₯Έ κ°œλ°œμžλ‚˜ 미래의 μžμ‹ μ΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³  μœ μ§€λ³΄μˆ˜ν•  λ•Œ 였λ₯˜λ₯Ό 쀄이고 μ‹œκ°„μ„ μ ˆμ•½ν•  수 μžˆλ„λ‘ ν•œλ‹€.

 

λͺ…ν™•μ„±μ˜ μ •μ˜

λͺ…확성은 λ‹€μŒκ³Ό 같은 νŠΉμ„±μ„ ν¬ν•¨ν•œλ‹€.

가독성(Readabiltiy)

μ½”λ“œλ₯Ό μ‰½κ²Œ 읽을 수 μžˆλ„λ‘ μ„€κ³„ν•˜μ—¬, κ°œλ°œμžκ°€ μ½”λ“œμ˜ κΈ°λŠ₯κ³Ό λ™μž‘μ„ λΉ λ₯΄κ²Œ νŒŒμ•…ν•  수 있게 ν•œλ‹€.

이해도(understandability)

μ½”λ“œμ˜ 둜직과 ꡬ쑰가 λͺ…ν™•ν•˜μ—¬, μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ”μ§€ μˆ˜λΉ„κ²Œ 이해할 수 μžˆλ„λ‘ λ•λŠ”λ‹€.

예츑 κ°€λŠ₯μ„±(Predictability)

μ½”λ“œμ˜ 흐름이 예츑 κ°€λŠ₯ν•˜κ²Œ μ„€κ³„λ˜μ–΄, 각 뢀뢄이 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ‰½κ²Œ μΆ”λ‘ ν•  수 μžˆλ‹€.

 

λͺ…확성이 μ€‘μš”ν•œ 이유

효율적인 ν˜‘μ—…

λͺ…ν™œν•œ μ½”λ“œλŠ” νŒ€μ› κ°„μ˜ ν˜‘μ—…μ„ μ›ν™œν•˜κ²Œ ν•˜λ©°, μƒˆλ‘œμš΄ κ°œλ°œμžκ°€ ν”„λ‘œμ νŠΈμ— μ°Έμ—¬ν•  λ•Œ λΉ λ₯΄κ²Œ 적응할 수 μžˆλ„λ‘ λ•λŠ”λ‹€.

μœ μ§€λ³΄μˆ˜μ„±

λͺ…ν™•ν•œ μ½”λ“œλŠ” μœ μ§€λ³΄μˆ˜ μ‹œ λ°œμƒν•  수 μžˆλŠ” 였λ₯˜λ₯Ό 쀄이며, μ½”λ“œ 변경이 ν•„μš”ν•œ κ²½μš°μ—λ„ μ‰½κ²Œ μ΄ν•΄ν•˜κ³  μˆ˜μ •ν•  수 μžˆλ„λ‘ ν•œλ‹€.

버그 κ°μ†Œ

λͺ…ν™•ν•œ μ½”λ“œλŠ” 버그λ₯Ό 쀄이고, μ½”λ“œ 리뷰와 ν…ŒμŠ€νŠΈ κ³Όμ •μ—μ„œ 였λ₯˜λ₯Ό 더 μ‰½κ²Œ λ°œκ²¬ν•  수 있게 ν•œλ‹€.

λ¬Έμ„œν™” κ°μ†Œ

λͺ…ν™•ν•œ μ½”λ“œλŠ” λ³„λ„μ˜ λ¬Έμ„œν™” 없이도 μ½”λ“œλ₯Ό μ΄ν•΄ν•˜λŠ” 데 도움이 λœλ‹€.

 

λͺ…확성을 λ†’μ΄λŠ” 방법

λͺ…확성을 λ†’μ΄λŠ” λ°©λ²•μ—λŠ” μ—¬λŸ¬ 가지가 μžˆλ‹€. λ‹€μŒμ€ λͺ‡ 가지 핡심 μ „λž΅μ΄λ‹€.

1. 의미 μžˆλŠ” λ³€μˆ˜μ™€ ν•¨μˆ˜λͺ… μ‚¬μš©

λ³€μˆ˜λͺ…κ³Ό ν•¨μˆ˜λͺ…을 직관적이고 의미 있게 μž‘μ„±ν•˜μ—¬, μ½”λ“œκ°€ μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”μ§€ λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λ‚Έλ‹€.

 

μ˜ˆμ‹œ

// λ‚˜μœ 예
int x = 10;
int y = 20;
int z = x + y;

// 쒋은 예
int numberOfApples = 10;
int numberOfOranges = 20;
int totalFruits = numberOfApples + numberOfOranges;

 

μœ„ μ˜ˆμ‹œμ—μ„œ 두 번 μ§Έ μ½”λ“œλŠ” λ³€μˆ˜λͺ…이 λͺ…ν™•ν•˜λ©°, μ½”λ“œκ°€ μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”μ§€ μ‰½κ²Œ 이해할 수 μžˆλ‹€.

 

2. 주석 μ‚¬μš©

주석을 톡해 μ½”λ“œμ˜ λ³΅μž‘ν•œ λΆ€λΆ„μ΄λ‚˜ μ˜λ„, νŠΉμ • 둜직의 배경을 μ„€λͺ…ν•˜λ©° 이해도λ₯Ό 높인닀.

 

μ˜ˆμ‹œ

// 이 ν•¨μˆ˜λŠ” 두 숫자의 합을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
public int addNumbers(int a, int b) {
    return a + b;
}

 

주석은 ν•¨μˆ˜κ°€ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ„ λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•΄, μ½”λ“œ 이해λ₯Ό λ•λŠ”λ‹€.

 

3. μΌκ΄€λœ μ½”λ”© μŠ€νƒ€μΌ

μΌκ΄€λœ λ“€μ—¬μ“°κΈ°, 곡백 μ‚¬μš©, μ½”λ“œ μŠ€νƒ€μΌμ„ μœ μ§€ν•˜μ—¬, μ½”λ“œμ˜ ꡬ쑰λ₯Ό λͺ…ν™•ν•˜κ²Œ ν•œλ‹€.

 

μ˜ˆμ‹œ

// μΌκ΄€λœ 듀여쓰기와 곡백 μ‚¬μš©
public void printNumbers() {
    for (int i = 0; i < 10; i++) {
        System.out.println(i);
    }
}

 

μΌκ΄€λœ μŠ€νƒ€μΌμ€ μ½”λ“œμ˜ 흐름을 μ‰½κ²Œ νŒŒμ•…ν•  수 있게 ν•œλ‹€.

 

4. λͺ¨λ“ˆν™”와 ν•¨μˆ˜ 뢄리

큰 ν•¨μˆ˜λ₯Ό μž‘μ€ λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•˜μ—¬, 각각의 ν•¨μˆ˜κ°€ 단일 μ±…μž„μ„ 가지도둝 ν•œλ‹€.

 

μ˜ˆμ‹œ

// λ‚˜μœ 예
public void processOrder() {
    // μ£Όλ¬Έ 검증
    // 결제 처리
    // 배솑 μ€€λΉ„
}

// 쒋은 예
public void processOrder() {
    validateOrder();
    processPayment();
    prepareShipping();
}

private void validateOrder() {
    // μ£Όλ¬Έ 검증 둜직
}

private void processPayment() {
    // 결제 처리 둜직
}

private void prepareShipping() {
    // 배솑 μ€€λΉ„ 둜직
}

 

ν•¨μˆ˜ λΆ„λ¦¬λŠ” μ½”λ“œμ˜ μ±…μž„μ„ λΆ„λͺ…ν•˜κ²Œ ν•˜κ³ , 각 뢀뢄이 μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ„ λͺ…ν™•ν•˜κ²Œ ν•œλ‹€.

 

5. λͺ…ν™•ν•œ μ œμ–΄ 흐름

λ³΅μž‘ν•œ μ‘°κ±΄λ¬Έμ΄λ‚˜ μ œμ–΄ 흐름을 λͺ…ν™•ν•˜κ²Œ ν•΄, μ½”λ“œμ˜ 논리λ₯Ό μ‰½κ²Œ 좔적할 수 있게 ν•œλ‹€.

 

μ˜ˆμ‹œ

// λ‚˜μœ 예
if (status == 1 || status == 2) {
    // μž‘μ—… μˆ˜ν–‰
}

// 쒋은 예
if (isOrderPending(status)) {
    // μž‘μ—… μˆ˜ν–‰
}

private boolean isOrderPending(int status) {
    return status == 1 || status == 2;
}

 

μ œμ–΄ 흐름을 λͺ…ν™•ν•˜κ²Œ ν•΄, μ½”λ“œκ°€ 무엇을 γ„±κ²€μ‚¬ν•˜κ³  μžˆλŠ”μ§€ μ‰½κ²Œ 이해할 수 μžˆλ‹€.

 

λͺ…확성을 ν‰κ°€ν•˜λŠ” μ§€ν‘œ

가독성 평가

μ½”λ“œλ₯Ό 읽고 μ΄ν•΄ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„

μœ μ§€λ³΄μˆ˜μ„±

μ½”λ“œ 변경이 ν•„μš”ν•œ 경우 μˆ˜μ •μ˜ μš©μ΄μ„±

버그 λ°œμƒλ₯ 

λͺ…ν™•ν•˜μ§€ μ•Šμ€ μ½”λ“œμ—μ„œ λ°œμƒν•˜λŠ” λ²„κ·Έμ˜ λΉˆλ„

ν˜‘μ—… νš¨μœ¨μ„±

νŒ€μ› κ°„ μ½”λ“œ μ΄ν•΄μ˜ μš©μ΄μ„±

 

λͺ…ν™•μ„±κ³Ό κ΄€λ ¨λœ 사둀

사둀 1: λ³΅μž‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ λͺ…ν™•ν™”

λ³΅μž‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ λͺ…ν™•ν•˜κ²Œ μž‘μ„±ν•΄ 이해도λ₯Ό 높이고, 이후 μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•œλ‹€.

 

μ˜ˆμ‹œ

// λ³΅μž‘ν•œ λ‘œμ§μ„ λͺ…ν™•ν•˜κ²Œ 뢄리
public boolean isValidUser(String username, String password) {
    return isUsernameValid(username) && isPasswordValid(password);
}

private boolean isUsernameValid(String username) {
    // μ‚¬μš©μž 이름 검증 둜직
    return username.length() > 5;
}

private boolean isPasswordValid(String password) {
    // λΉ„λ°€λ²ˆν˜Έ 검증 둜직
    return password.length() > 8;
}

 

사둀 2 : 가독성 높은 데이터 처리

데이터 처리 λ‘œμ§μ„ λͺ…ν™•ν•˜κ²Œ μž‘μ„±ν•˜μ—¬, λŒ€μ΄ν„° νλ¦„μœΌ μ‰½κ²Œ 이해할 수 있게 ν•œλ‹€.

 

μ˜ˆμ‹œ

// 가독성 높은 데이터 처리
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> upperCaseNames = names.stream()
    .map(String::toUpperCase)
    .collect(Collectors.toList());

 

κ²°λ‘ 

ν”„λ‘œκ·Έλž¨μ˜ λͺ…확성은 μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ 맀우 μ€‘μš”ν•œ μš”μ†Œλ‘œ, μ½”λ“œμ˜ 가독성과 이해도λ₯Ό λ†’μ—¬ μœ μ§€λ³΄μˆ˜μ™€ ν˜‘μ—…μ„ μš©μ΄ν•˜κ²Œ ν•œλ‹€. λͺ…확성을 λ†’μ΄λŠ” λ‹€μ–‘ν•œ 기법을 톡해, μ†Œν”„νŠΈμ›¨μ–΄ ν’ˆμ§ˆμ„ ν–₯μƒμ‹œν‚€κ³  버그λ₯Ό 쀄이며, 개발자 κ°„μ˜ 효율적인 ν˜‘μ—…μ„ κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.

μ½”λ“œκ°€ λͺ…ν™•ν• μˆ˜λ‘ ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ „μ„±κ³Ό μ•ˆμ •μ„± λ˜ν•œ μžμ—°μŠ€λŸ½κ²Œ ν–₯μƒλ˜λ©°, μ΄λŠ” κ³ ν’ˆμ§ˆμ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•˜λŠ” 데 μ€‘μš”ν•œ κΈ°μ—¬λ₯Ό ν•œλ‹€.