컴퓨터/이론 및 tools 사용

[리팩토링 refactoring] Organizing Data 데이터 체계화 - Replace array with Object 배열을 객체로 전환

review777777 2017. 1. 26. 23:16
반응형

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

생성된 클래스에서 이전에 메인 클래스 또는 다른 곳에서 저장했던 관련된 모든 행동을 배치 할 수 있다.

클래스 필드는 배열 요소 보다 기록하기 더 쉽다.



반응형