일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C++최적화
- 델리게이트
- map
- 약참조
- 데이터애셋
- moreeffectiveC++
- 정렬알고리즘
- UELOG
- 프로그래머스
- 언리얼가비지컬렉터
- 강참조
- 언리얼엔진구조체
- UE4 커스텀로그
- C++
- 스마트포인터
- 정렬
- enumasByue
- UML관련
- 람다
- 람다사용정렬
- 크리티컬섹션
- 알고리즘
- UE_LOG
- 애셋로드
- 자료구조
- dataasset
- 선택정렬
- stl
- unorder_map
- BFS
- Today
- Total
목록ReFactoring (9)
기억을 위한 기록들
1. 메서드 올리기 : 한 클래스를 상속받는 여러 클래스에서 동일한 메서드가 생긴다면 부모클래스에서 올려준다. 2. 필드 올리기 : 1번과 마찬가지로 비슷하게 사용되는 필드가 있다면 부모에서 호출해주자 3. 생성자 본문 올리기 : 서브 클래스들에서 기능이 같은 생성자라면 부모 클래스로 올려주자. 4. 메서드 내리기 : 1번의 반대로. 부모클래스에서 선언되었다고 모든 서브클래스에서 사용되는지 확인해보자. 5. 필드 내리기: 2번의 반대로, 모든 서브클래스에서 사용되지 않는다면 부모클래스에 있을필요가 없다. 6. 타입 코드를 서브클래스로 바꾸기 : 인스턴스를 생성해주는 함수가 있을때 타입에 따라 클래스 종류를 다르게 생성하는게 낫다. 7. 서브 클래스 제거하기 : 서브 클래싱은 원래 데이터 구조와 다른 변종..
1. 질의 함수와 변경함수 분리하기 2. 함수의 매개변수화하기 3. 플래그 인수 제거하기 : 플래그인수란 호출되는 함수가 실행할 로직을 호출하는 쪽에서 선택하기 위해 전달하는 인수이다. 4. 객체 통째로 넘기기 5. 매개변수를 질의 함수로 바꾸기 6. 질의함수를 매개변수로 바꾸기 : 5번의 반대 7. 세터(Setter) 제거하기 : 세터 메서드가 있는건 필드가 수정될수 있다는 뜻이다. 객체 생성 후 필드가 수정되지 않길 원하면 세터는 필요가 없어진다. 8. 생성자를 팩터리 함수로 바꾸기 9. 함수를 명령으로 바꾸기 10. 명령을 함수로 바꾸기 : 9번의 반대 11. 수정된 값 반환하기 : 어떤 함수에서 데이터가 수정된다면 반환을 통해 명확히 알려주는게 알아보기 쉬울수 있다. 12. 오류 코드를 예외로 바..
1. 조건문 분해하기 : 복잡한 조건부 로직은 프로그램을 복잡하게 만드는 가장 흔한 원흉에 속한다. 최대한 알아보기 쉽게, 쪼개는것도 좋다. 2. 조건식 통합하기 : 조건문을 여러개보다는 &&와 || 연산자등을 같이 잘 활용하자. 3. 중첩 조건문을 보호 구문으로 바꾸기 : 여러개의 조건문을 쓰며 if else하는것보다 상황에 맞춰 깔끔하게 if 여러개로 쪼개는게 나을수도 있다. 4. 조건부 로직을 다형성으로 바꾸기 5. 특이 케이스 추가하기 6. 어서션(Assertion) 추가하기 7. 제어플래그를 탈출문으로 바꾸기
1. 변수 쪼개기 : 임시 변수로 사용하더라도 대충쓰진 말자(나중에 헷갈릴수도) 2. 필드 이름 바꾸기 : 클래스내 변수이름말고도 게터세터 이름도 중요하다. 3. 파생 변수를 질의 함수로 바꾸기 : 값을 쉽게 계산해낼 수 있는변수들은 모두 제거한다. 계산과정으로 보여주는것도 데이터의 의미를 더 분명히 드러낼수 있다. 4. 참조를 값으로 바꾸기 5. 값을 참조로 바꾸기 6. 매직 리터럴 바꾸기 : 코드를 읽는 사람이 어떤 변수의 값의 의미를 모른다면 숫자 자체로는 의미를 명확히 알려주지못할때 매직 리터럴이라 한다. (ex/ 3.14...f - > const float PI=3.14..f; )
1. 함수 옮기기 : 좋은 소프트웨어의 핵심은 모듈화가 얼마나 잘 되어 있느냐를 뜻하는 모듈성이다. 2. 필드 옮기기 3. 문장을 함수로 옮기기 4. 문장을 호출한 곳으로 옮기기 : 3번 문장을 함수로 옮기기의 반대 5 . 인라인 코드를 함수 호출로 바꾸기 6. 문장 슬라이드 하기 : 관련 코드들이 가까이 모여 있다면 이해기 더 쉽다. 7. 반복문 쪼개기 : 하나의 반복문에서 두가지 일을 시키지말고 한개만 시키자. 하지만 반복문이 여러번이 되는것이긴한데, 하나로 합치는건 오히려 쉽다. 8. 반복문 파이프라인 바꾸기 : 자바스크립트 파이프라인 연산을 말하고 있다. 9. 죽은 코드 제거하기 : 쓰이지 않는 코드가 비용을 잡아먹진 않지만, 나중을 위해서라도 안쓰게 된다면 지우자.
1. 레코드 캡슐화 하기 : 가변 데이터라면 객체를 선호하자. 2. 컬렉션 캡슐화 하기 3. 기본형을 객체로 바꾸기 : 출력 이상의 기능이 필요해지는 순간 데이터를 표현하는 전용 클래스를 정의하는 편 4. 임시 변수를 질의 함수로 바꾸기 5. 클래스 추출하기 : 메서드와 데이터가 너무 많은 클래슨느 이해하기 쉽지 않으니 잘살펴보고 적절히 분리한다. 6. 클래스 인라인하기 :5번 추출하기의 거꾸로 돌리는 리팩터링이다. 두클래스를 하나로 합칠수도 있다는것 7. 위임 숨기기 : 모듈화 설계를 제대로 하는 핵심은 캡슐화이다. 8. 중개자 제거하기 : 7번 위임 숨기기의 반대 리팩터링 9. 알고리즘 교체하기
1. 함수 추출하기 2. 함수 인라인 하기 3. 변수 추출하기 4. 변수 인라인 하기 5. 함수 선언 바꾸기 6. 변수 캡슐화하기 7. 변수 이름 바꾸기 8. 매개변수 객체 만들기 : 여기저기에 나타나는 데이터 무리들은 모아서 객체로 만들어주는 게 낫다. 9. 여러 함수를 클래스로 묶기 : 비슷하게 사용되는 함수는 클래스로 묶는 게 낫다 10. 여러 함수를 변환 함수로 묶기 : 변환 함수는 원본 데이터를 입력받아서 필요한 정보를 모두 도출하고, 각각을 출력 데이터의 필드에 넣어 변환한다. 11. 단계 쪼개기 : 서로 다른 두 대상을 한꺼번에 다루는 코드를 발견하면 각각을 별개 모듈로 나누는 방법을 모색하자.
1. 기이한 이름 이름만 보고도 각각이 무슨 일을 하고 어떻게 사용해야 하는지 명확히 알 수 있도록 신경 써야 한다. 2. 중복 코드 똑같은 코드 구조가 여러 곳에서 반복된다면 하나로 통합하도록 한다. 3. 긴 함수 함수가 길어질수록 이해하기 어려워진다. 함수 이름을 잘 지어두기만 해도 본문 코드를 볼 이유가 사라진다. 그러니 적극적으로 함수를 쪼개도록 하자. 4. 긴 매개변수 목록 함수의 매개변수 목록이 길어지면 그 자체로 이해하기 어려워진다. 되도록 짧게 하는 게 좋고, 클래스가 그걸 도와줄 수 있다. 5. 전역 데이터 전역 데이터가 가변적이라면 다루기가 까다로워진다. 바뀌지 않는다고 보장하는 편이 낫다. 6. 가변 데이터 변수의 유효 범위가 짧으면 괜찮은데, 넓어진다면 그에 따른 위험도 커지게 된다..
리팩터링이란? - 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부구조를 변경하는 기법. - 리팩터링 하기 전과 후의 코드가 똑같이 동작해야 한다. - 리팩터링은 성능 최적화와 비슷하다. 코드를 변경하지만, 전반적인 기능은 그대로 유지한다. 소프트웨어 개발의 목적은 두 가지로 '기능 추가'인지, '리팩터링'인지를 구분해서 작업하는 게 좋다. '기능 추가', '리팩터링' 두 작업을 번갈아가면서 할 수는 있어도 동시에 안 하는 게 좋다. 리팩터링을 하는 이유? - 소프트웨어 설계가 좋아진다. 리팩터링을 하지 않으면 내부 설계(아키텍처)가 썩기 쉽다. - 소프트웨어를 이해하기 쉬워진다. 몇 달이 지난 누군가 내 코드를 수정하고자 읽을 때를 위함일 수도 있다. 어떻게 보면 나 ..