1. 이해하기 힘든 이름

2. 함수 선언 변경하기(Change Function Declaration)

3. 변수 이름 바꾸기(Rename Variable == Local Variable)

4. 필드 이름 바꾸기(Rename Field == Global Variable)

1. 이해하기 힘든 이름(Mysterious Name)

2. 함수 선언 변경하기(Change Function Declaration)

2-1) 함수 변경하기-1

2-2) 함수 변경하기-2

2-3) 함수 변경하기 리팩토링

2-3)-1. 리팩토링 전

2-3)-2. 리팩토링 후

3. 변수 이름 바꾸기(Rename Variable)

3-1) 개념 잡기

3-2) 리팩토링 전

3-3) 리팩토링 후

public class StudyDashboard {

    private Set<String> usernames = new HashSet<>();
    private Set<String> reviews = new HashSet<>();

    private void loadReviews() throws IOException {
        GitHub gitHub = GitHub.connect();
        GHRepository repository = gitHub
												.getRepository("whiteship/live-study");
        GHIssue issue = repository.getIssue(30);

        // 지역 변수 : Local Variable(comments와 comment를 reviews와 review)
        List<GHIssueComment> reviews = issue.getComments();
        for (GHIssueComment review : reviews) {
            usernames.add(review.getUserName());
            reviews.add(review.getBody());
        }
    }

    public Set<String> getUsernames() {return usernames;}
    public Set<String> getReviews() {return reviews;}

    public static void main(String[] args) throws IOException {
        // 지역 변수 : Local Variable(OK)
        StudyDashboard studyDashboard = new StudyDashboard();
        studyDashboard.loadReviews();

        // 람다식에서 사용하는 변수(인텔리제이 레퍼런스 함수)
        studyDashboard.getUsernames().forEach(System.out::println);
        studyDashboard.getReviews().forEach(System.out::println);
    }
}

4. 필드 이름 바꾸기(Rename Field == Global Variable)

4-1) 개념

4-2) 리팩토링 전

4-3) 리팩토링 후

public class StudyDashboard {

    // 전역변수(Global)
    private Set<String> reviewers = new HashSet<>();    // 리뷰어
    private Set<String> reviews = new HashSet<>();      // 리뷰

    private void loadReviews() throws IOException {
        GitHub gitHub = GitHub.connect();
        GHRepository repository = gitHub.getRepository("whiteship/live-study");
        GHIssue issue = repository.getIssue(30);

        List<GHIssueComment> reviews = issue.getComments();
        for (GHIssueComment review : reviews) {
						// 전역변수 수정 후 
            reviewers.add(review.getUserName());
            reviews.add(review.getBody());
        }
    }

		// 전역 변수 수정 후 
    public Set<String> getReviewers() {return reviewers;}
    public Set<String> getReviews() {return reviews;}

    public static void main(String[] args) throws IOException {
        StudyDashboard studyDashboard = new StudyDashboard();
        studyDashboard.loadReviews();

        studyDashboard.getReviewers().forEach(name -> System.out.println(name));
        studyDashboard.getReviewers().forEach(System.out::println);
        studyDashboard.getReviews().forEach(System.out::println);
    }
}