컴퓨터/이론 및 tools 사용 47

[리팩토링 refactoring] Composing Method 메소드 구성 - Extract Method 메소드 추출

Extract Method 메소드 추출 메소드에서 행이 많을수록 메소드가하는 일을 파악하는 것이 더 어렵다. 코드에서 거친 모서리를 제거하는 것 외에도 메소드 추출은 다른 많은 리팩토링 접근법의 한 걸음이기도하다. Problem 함께 구룹화 할 수 있는 코드 조각이 있다. void printOwing() { printBanner(); //print details System.out.println("name: " + name); System.out.println("amount: " + getOutstanding()); } Solution 이 코드를 별도의 새 메서드 (또는 함수)로 이동하고 이전 코드를 메서드 호출로 바꾼다. void printOwing() { printBanner(); printDetai..

[리팩토링 refactoring] Dealing with Generalisation 일반화 처리 - Pull Up Constructor Body 생성자 내용 상향

Problemclass Manager extends Employee { public Manager(String name, String id, int grade) { this.name = name; this.id = id; this.grade = grade; } //... }Solutionclass Manager extends Employee { public Manager(String name, String id, int grade) { super(name, id); this.grade = grade; } //... }Pull Up Method와 차이점 1. 자바에서는 하위 클래스가 생성자를 상속받을 수 없으므로 하위 클래스 생성자에 Pull Up Method를 적용하고 수퍼 클래스에 대한 모든 생성자 코..

[리팩토링 refactoring]Simplifying Method Calls 메서드 호출 단순화 - Separate Query from Modifier 상태 변경 메서드와 값 반환 메서드를 분리

▪Separate Query from Modifier 상태 변경 메서드와 값 반환 메서드를 분리 이 인수 분해 기술은 명령 및 쿼리 책임 분리를 구현이 원칙은 객체를 변경하는 코드와 데이터를 가져 오는 코드를 분리해야한다는 것을 의미 데이터 가져 오기 코드는 쿼리 이름이다.오브젝트의 가시 상태에서 변경하는 코드는 수정 자로 지칭된다.쿼리와 수정자를 결합하면 조건을 변경하지 않고 데이터를 가져올 방법이 없다.즉, 질문을하고 답변을받을 때 답변을 변경할 수 있다.이 문제는 쿼리를 호출하는 사람이 메소드의 "부작용"에 대해 알지 못해 런타임 오류를 유발할 수있는 경우 더욱 심각 해진다. 그러나 부작용은 객체의 가시 상태를 변경하는 수정 자의 경우에만 위험하다.예를 들어 객체의 공용 인터페이스, 데이터베이스의 ..

[리팩토링 refactoring] Dealing with Generalisation 일반화처리

▶Dealing with Generalisation 일반화 처리추상화는 주로 클래스상속 계층구조를 따라 기능을 이동과 관련된 새로운 클래스와 인터페이스의 생성하는 위임과 역 상속의 대체하는 리팩토링 기술의 하나의 그룹이다 Dealing with Generalisation- Pull Up Field- Pull Up Method- Pull Up Constructor Body- Push Down Method- Push Down Field- Extract Subclass- Extract Superclass- Extract Interface- Collapse Hierachy- Form Template Method- Replace Inheritance with Delegation- Replace Delegation..

[리팩토링 refactoring] Simplifying Method Calls - 메소드 호출 단순화

▶Simplifying Method Calls 메서드 호출 단순화이 기술은 메서도 호출을 더 단순하고 이해하기 쉽게 한다. 이것은 차례로 클래스 간의 상호작용을 위한 인터페이스를 단순화한다. Simplifying Method Calls- Rename Method- Add Parameter- Remove Parameter- Separate Query from Modifier- Parameterize Method- Replace Parameter with Explicit Methods- Preserve Whole Object- Replace Parameter with Method Call- Introduce PArameter Object- Remove Setting Method- Hide Method- Re..

[리팩토링 refactoring] Simplifying Conditional Expressions 조건문의 간결화

▶Simplifying Conditional Expressions 조건문의 간결화조건문은 시간이 지남에 따라 그들의 논리에 점점 더 복잡해지는 경향이 있다. 이 기술은 조건문을 간결하게 한다. Simplifying Conditional Expressions- Decompose Conditional- Consolidate Conditional Expression- Consolidate Duplicate Conditional Fragments- Remove Control Flag- Replace Nested Conditional with Guard Clauses- Replace Conditional with Polymorphism- Introduce Null Object- Introduce Assertion

[리팩토링 refactoring] Simplifying Conditional Expressions 조건문의 간결화 - Remove Control Falg 제어 플레그 제거

▪Remove Control Flag 제어 플래그 제거제어 플래그는 프로그래머가 항상 함수 (함수 선언 행)와 종료 점 (함수의 맨 끝에 있음)에 대해 한 개의 진입 점을 가지고있는 yore 일까지 거슬러 올라간다. 현대 프로그래밍 언어에서는 루프 및 기타 복잡한 구문에서 제어 흐름을 수정하기위한 특수 연산자가 있으므로이 스타일은 더 이상 사용되지 않는다. • break : 루프를 중지 • continue : 현재 루프 분기의 실행을 중지하고 다음 반복에서 루프 조건을 확인 • return : 전체 함수의 실행을 중지하고 연산자에 주어진 경우 결과를 반환 Problem & Solution일련의 boolean식에서 컨트롤 플래그 역할을하는 변수가 있는 경우, break 또는 return을 대신 사용하라. ..

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

▪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");str..

[리팩토링 refactoring] Organizing Data 데이터 체계화

▶Organizing Data 데이터 체계화이 리팩토링 기술은 데이터 처리를 돕고 프리미티브를 풍푸한 클래스 기능으로 대체한다또 다른 중요한 결과는 클래스 연결을 풀어서 더 이식성 있고 재사용 가능하게 한다. Organizing Data- Self Encapsutate Field- Replace Data Value with Object- Change Value to Reference- Change Reference to Value- Replace Array with Object- Duplicate Observed Data- Change Unidrectional Association to Bidirectional- Change Bidirectional Association to Unidrectional- ..

[리팩토링 refactoring] Moving Features between Objects 객체간의 기능 이동 - Move Field 필드이동

▪Move Field 필드 이동Problem & Solution필드가 정의된 클래스보다 다른 클래스에서 더 많이 사용된다면 필드를 더 많이 사용되는 다른 클래스로 옮기고, 필드를 사용하는 모든 사용자들을 변경한다 종종 필드는 추출 클래스 기술의 일부로 이동된다. 필드를 떠날 클래스를 결정하는 것은 어려울 수 있다. 경험에 의해서 필드를 사용하는 메소드와 동일한 위치에 필드를 둔다. (또는 대부분의 메소드가있는 곳). 이 규칙은 필드가 단순히 잘못된 위치에있을 때 도움이된다. Problem class Account { // ... private AccountType type; public double interestForAmount_days(double amount, int days) { return ge..