실습 내용 저장소: https://github.com/Hyeon9mak/student-information-system
문자열은 생성자를 사용하지 마라
이유 1. 생성자 매개변수로 넘겨진 문자열과, 생성된 객체의 기능이 완전히 동일하다.
Java 관련 어시스트 기능을 제공하는 IDE에서는 생성자를 사용하면 부적절(불필요)하다는 알림이 뜰 정도다.
이유 2. 만일 해당 코드가 루프안에 속할 경우, 루프 횟수만큼 인스턴스가 생성된다.
해결 방법
String s = "bikini"; // 문자열 리터럴 생성 방식
그냥 간단하게 리터럴하게 사용하면 된다.
자세한 내용은 이펙티브 자바 아이템 6을 참고하자!
문자열 연결은 StringBuilder
문자열을 연결할 때 흔하게 사용하는 방식이 + 연산자를 이용하는 것이다. 그러나 자바에서 문자열을 + 연산자를 통해 연결할 경우 단순히 두 개의 문자열이 연결되는 것이 아니라 두 문자열을 연결한 새로운 문자열을 하나 생성하게 된다.
이 때문에 문자열 연결이 반복적(혹은 자주)으로 일어난다면 성능에 영향을 끼칠 수 있다.
StringBuilder는 이러한 상황에서 훌륭한 도구가 되어준다.
StringBuilder의 효능에 대해서는 함께 이펙티브 자바 스터디를 진행한
JunHyeon96 님의 글을 통해서 확인해보자!
다양한 플랫폼(OS)에서 개행
개행에 단순히 \n
을 이용할 경우 다양한 플랫폼으로 이식이 어렵다.
유닉스에서 의미하는 \n
은 윈도우즈에서 \r\n
으로 해석된다.
플랫폼간 차이를 보충하기 위해서 시스템 특성 값인 line.separator
를 사용하자
private static final String NEW_LINE =
System.getProperty("line.separator");
단일 역할의 원칙
클래스를 수정하는데에는 오직 한 가지 이유만 있어야 한다.
어려운 개념인가? 그러나 단순하게 해석하면 “메서드와 클래스를 최대한 쪼개라. 메서드와 클래스가 각각 하나씩만 잘하게 해라” 가 된다. 우리가 알아야할 점은 메서드와 클래스를 쪼갰을 때 얻는 이득이다.
1. 확장성이 좋아진다.
얘를 들어 랜덤한 확률로 전진하는 🚗Car객체를 만든다 생각해보자.
- 🚗Car객체가 랜덤이 아닌 특정 기준을 가지고 전진한다면?
- 특정 기준이 시시각각 변한다면?
- 랜덤한 확률로 전진하는 로직을 🚗Car가 아닌, 💂Soldier가 사용하게 된다면?
🚗Car객체의 메서드로 랜덤 확률 전진을 결정하는 것보다, 랜덤 확률 전진을 새로운 클래스로 나누어 관리하는 것이 좋을 것이다.
2. 유지보수 영역이 명확해진다.
클래스를 수정하는데에는 오직 한 가지 이유만 있어야한다는 이야기를 읽고 내 멋대로 해석한 것이긴 하지만, 틀린 말은 아닐 것이다. 랜덤 확률로 전진하는 🚗Car객체의 랜덤 확률을 변경하려는 입장에서는 ‘🚗Car객체를 수정했다.’ 라고 이해하게 된다. 정작 🚗Car객체의 이동, 이름, 위치 등 정보는 변한 것이 아무것도 없는데 말이다.
Lesson03은 쉽게 이해하고 넘어갈 수 있는 부분이 많아서 짧게 끝났다.
앞으로도 중요하다고 생각되는 부분만 기록할 생각이다!
댓글남기기