목차
1. 가독성과 유지보수성을 높이기 위해 서술적이고 의미 있는 변수 이름을 사용하세요.
// 나쁜 예
int a;
int d;
// 좋은 예
int age;
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
2. 마법의 숫자(magic numbers)를 코드에서 사용하지 말고, 대신에 상수로 선언하여 코드의 가독성과 유지보수성을 개선하세요.
// 나쁜 예
if (status == 1) {
// 뭔가를 수행
}
// 좋은 예
private static final int ACTIVE_STATUS = 1;
if (status == ACTIVE_STATUS) {
// 뭔가를 수행
}
3. try-with-resources를 사용하여 파일, 데이터베이스 연결 등과 같은 리소스를 사용한 후 자동으로 닫을 수 있도록 하세요.
// try-with-resources를 사용하지 않은 경우
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
// 라인 처리
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// try-with-resources를 사용한 경우
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
// 라인 처리
}
} catch (IOException e) {
e.printStackTrace();
}
4. 의도하지 않은 상태 변경을 방지하기 위해 변경할 수 없는(immutable) 객체와 클래스를 사용하세요.
// 변경 가능한 객체
public class Person {
private String name;
public void setName(String name) {
this.name = name;
}
}
// 변경할 수 없는 객체
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
5. 느슨한 결합(loose coupling)을 실현하고 유지보수성을 향상하기 위해 인터페이스와 추상 클래스를 사용하세요.
// 인터페이스를 사용하지 않은 경우
public class Person {
public void sayHello() {
System.out.println("Hello!");
}
}
// 인터페이스를 사용한 경우
public interface Greeting {
void sayHello();
}
public class Person implements Greeting {
@Override
public void sayHello() {
System.out.println("Hello!");
}
}
6. 코드 재사용과 유지보수성 향상을 위해 상속과 다형성을 사용하세요.
public abstract class Shape {
public abstract double getArea();
}
public class Rectangle extends Shape {
private final double length;
private final double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
public double getArea() {
return length * width;
}
}
public class Circle extends Shape {
private final double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * Math.pow(radius, 2);
}
}
위의 다형성을 활용한 사례 (SOLID 원칙 중 : OCP 예제 참조)
https://devloo.tistory.com/entry/SOLID-%EB%94%94%EC%9E%90%EC%9D%B8-%EC%9B%90%EC%B9%99-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%8B%A8%EC%88%9C%ED%99%94
7. 제네릭을 사용하여 다른 데이터 유형에서 작동하는 일반 코드를 작성하세요.
public class Box<T> {
private T value;
public Box(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
Box<String> stringBox = new Box<>("Hello");
Box<Integer> intBox = new Box<>(42);
8. 열거형(enum) 타입을 사용하여 고정된 상수 집합을 나타내세요.
public enum DayOfWeek {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
9. 리소스를 자동으로 관리하기 위해 try-with-resources를 사용하세요.
try-with-resources 문은 Java 7에서 도입된 기능으로, 스트림이나 데이터베이스 연결과 같이 사용 후에 닫아야 하는 리소스의 자동 관리를 가능하게 합니다. try-with-resources 문은 각 리소스가 문장의 끝에서 닫히도록 보장하므로 수동으로 닫을 필요가 없습니다.
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
10. Java 컬렉션을 효과적으로 사용하세요.
Java 컬렉션은 관련 객체 그룹을 관리하기 위한 강력한 도구입니다. 컬렉션을 효과적으로 사용함으로써 보다 더 효율적이고 유지보수 가능한 코드를 작성할 수 있습니다. 다음은 Java 컬렉션을 효과적으로 사용하기 위한 몇 가지 팁입니다:
- 작업에 적합한 컬렉션 유형을 선택하세요. 예를 들어, 인덱스로 요소에 접근해야 하는 경우 ArrayList를 사용하고, 요소의 존재 여부를 빠르게 확인해야 하는 경우 HashSet을 사용하세요.
- 제네릭을 사용하여 타입 안전성을 보장하고 캐스팅을 피하세요.
- 향상된 for 루프를 사용하여 컬렉션을 반복하세요.
- Collections 클래스를 사용하여 컬렉션을 정렬하거나 섞고,
List<String> list = new ArrayList<>();
list.add("사과");
list.add("바나나");
list.add("체리");
Collections.sort(list);
for (String s : list) {
System.out.println(s);
}
읽어주셔서 감사합니다! 😊
개발 관련 궁금증이나 고민이 있으신가요?
아래 링크를 통해 저에게 바로 문의해 주세요! 쉽고 빠르게 도움 드리겠습니다.
'Development > Code' 카테고리의 다른 글
Spring Boot 3.3의 고급 기능 : 종합 가이드 (0) | 2024.06.26 |
---|---|
Spring State Machine을 어떻게 활용할 수 있을까요? (사용 방법 및 예제) (0) | 2024.06.26 |
자바 직렬화 사용을 피해야 하는 이유 (0) | 2024.06.25 |
[클린 아키텍처] 컴포넌트 원칙과 Spring Boot 어플리케이션 (1) | 2024.01.27 |
SOLID 원칙 : 객체 지향 프로그래밍 단순화 (0) | 2023.06.17 |