▪Replace array with Object 배열을 객체로 전환
배열은 단일 유형의 데이터 및 콜렉션을 저장하는 데 훌륭한 도구
그러나 우체국 상자와 같은 배열을 사용하고 box 1에 사용자 이름을 저장하고
box 14에 사용자 주소를 저장하면 언젠가는 매우 비효과적이다.
이 접근법은 누군가가 잘못된 "box"에 무엇인가 넣을 때 치명적인 오류를 일으키며
어떤 데이터가 어디에 저장되어 있는지 파악할 시간이 필요하다.
Problem & Solution
String[] row = new String[2]; row[0] = "Liverpool"; row[1] = "15"; | Performance row = new Performance(); row.setName("Liverpool"); row.setWins("15"); |
string[] row = new string[2]; row[0] = "Liverpool"; row[1] = "15"; | Performance row = new Performance(); row.SetName("Liverpool"); row.SetWins("15"); |
$row = array(); $row[0] = "Liverpool"; $row[1] = 15; | $row = new Performance(); $row->setName("Liverpool"); $row->setWins(15); |
row = [None * 2] row[0] = "Liverpool" row[1] = "15" | row = Performance(); row.setName("Liverpool") row.setWins("15") |
일부 요소가 다른 것을 의미하는 배열이 있다면 해당 배열을 각 요소에 대한 필드를 가지는 객체로 대체한다.
배열은 비슷한 객체가 어떤 순서대로 모여 있는 경우에 대해서만 사용 되어야 한다.
리팩토링 하는 방법
1. 배열의 데이터를 포함 할 새 클래스를 만든다.
배열 자체를 공용 필드로 클래스에 배치한다.
2.이 클래스의 객체를 원래 클래스에 저장하기위한 필드를 만든다
데이터 배열을 시작한 위치에 객체 자체를 만든다
3. 새 클래스에서 각 배열 요소에 대해 하나씩 액세스 메소드를 작성
메소드가 하는 일을 나타내는 자명 한 이름을 준다.
동시에 주 코드의 배열 요소를 사용하는 방법을 해당 액세스 방법으로 바꾼다.
4. 액세스 메소드가 모든 요소에 대해 작성된 경우, 배열을 비공개로 만든다.
5. 배열의 각 요소에 대해 클래스에 개인 메서드를 만든 다음 배열 대신이 필드를 사용하도록 액세스 메서드를 변경
6. 모든 데이터가 이동 된 경우 배열을 삭제
Benefits
생성된 클래스에서 이전에 메인 클래스 또는 다른 곳에서 저장했던 관련된 모든 행동을 배치 할 수 있다.
클래스 필드는 배열 요소 보다 기록하기 더 쉽다.
'컴퓨터 > 이론 및 tools 사용' 카테고리의 다른 글
[리팩토링 refactoring] Simplifying Method Calls - 메소드 호출 단순화 (0) | 2017.01.27 |
---|---|
[리팩토링 refactoring] Simplifying Conditional Expressions 조건문의 간결화 (0) | 2017.01.27 |
[리팩토링 refactoring] Simplifying Conditional Expressions 조건문의 간결화 - Remove Control Falg 제어 플레그 제거 (0) | 2017.01.27 |
[리팩토링 refactoring] Organizing Data 데이터 체계화 (0) | 2017.01.26 |
[리팩토링 refactoring] Moving Features between Objects 객체간의 기능 이동 - Move Field 필드이동 (0) | 2017.01.24 |
[리팩토링 refactoring] Moving Features between Objects 객체간의 기능 이동 (0) | 2017.01.24 |
[알고리즘] 퀵정렬 Quick Sort (0) | 2017.01.23 |