* getNo 함수와 NullPointException
* Refactoring - 가변 파라미터 사용
가변 파라미터 사용
가변 파라미터 사용(refactoring with variable parameters):
주어진 코드를 보면 inputString 메서드가 가변 파라미터 args를 사용하고 있다.
이렇게 하면 메서드를 호출할 때 여러 개의 인자를 전달할 수 있다. title에는 형식 문자열이 전달되고,
args에는 형식 문자열에 대응하는 값들이 전달된다. printf 메서드를 사용하여 형식 문자열과 값들을 출력하고,
사용자로부터 입력을 받아 반환한다.
public static String inputString(String title, Object... args) {
System.out.printf(title, args);
return scanner.nextLine();
}
* Refactoring - 임시변수를 질의 함수로 바꾸기
리팩토링 임시 변수를 사용하는 대신 질의 그 자체를 넣어라.
임시 변수를 질의 함수로 바꾸기(refactoring with replacing temporary variable with query function):
주어진 코드를 보면 Prompt.inputString("암호?")라는 임시 변수를 사용하고 있다.
이 변수는 board.getPassword()와 비교하여 암호가 일치하는지 확인하는 조건문에서 사용된다.
if (!Prompt.inputString("암호?").equals(board.getPassword())) {
System.out.printf("암호가 일치하지 않습니다.");
return;
}
* 13. 게시글 CRUD 추가
* 14. 독서록 CRUD 추가
* 기존 코드 복제해서 새 기능을 구현할 때 문제점
클래스 이름은 반드시 대문자로 시작하는 것이 관례이다.
non-static 변수로 만들어 확장성과 유지보수를 올리기 위해서는 객체를 생성해야하는데
이때는 보통 클래스의 이름을 소문자로 만들어 지정해주기때문이다.
해당 메소드가 인스턴스 변수를 쓰고 있지 않다면 (this를 사용하지 않는다면) ,
그 메소드는 static 메소드로 만들어 준다.
예를 들어,
아래와 같이 인스턴스 변수를 사용하지 않고 스태틱 변수만을 사용하는 경우에
static 메소드로 사용한다.
* 변수 초기화 문장
변수 초기화 문장은 자동으로 생성자 안으로 이동하여 컴파일하게 된다.
그러나 명시적으로는 클래스에 멤버로 두는 것이 좋다.
* 의존객체 주입
의존 객체 주입은 객체가 다른 객체에 의존할 때, 의존하는 객체를 직접 생성하는 대신
외부에서 해당 객체를 전달받는 방식이다. 이를 통해 객체 간의 결합도를 낮출 수 있고,
유연성과 재사용성을 향상시킬 수 있다.
MemberHandler 객체의 생성자에서 prompt 객체를 매개변수로 받고 있으므로, MemberHandler 객체를 생성할 때 prompt 객체를 전달해야 한다. 이를 통해 MemberHandler 객체는 외부에서 주입받은 prompt 객체를 사용할 수 있게 된다.
이는 MemberHandler 클래스가 Prompt 클래스에 직접 의존하지 않고, 외부에서 다양한 Prompt 객체를 주입받을 수 있는 유연한 설계를 가능하게 한다.
MemberHandler memberHandler = new MemberHandler(prompt);