일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터애셋
- BFS
- dataasset
- C++
- 프로그래머스
- 정렬알고리즘
- 언리얼엔진구조체
- 애셋로드
- 언리얼가비지컬렉터
- 크리티컬섹션
- 델리게이트
- UELOG
- 스마트포인터
- stl
- UE_LOG
- 강참조
- 약참조
- moreeffectiveC++
- 람다
- C++최적화
- unorder_map
- enumasByue
- 정렬
- 람다사용정렬
- map
- UML관련
- UE4 커스텀로그
- 선택정렬
- 자료구조
- 알고리즘
- Today
- Total
목록Note (423)
기억을 위한 기록들
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. 죽은 코드 제거하기 : 쓰이지 않는 코드가 비용을 잡아먹진 않지만, 나중을 위해서라도 안쓰게 된다면 지우자.
// cm/s const float centimeterPerSecond = GetVelocity().Size(); // GetSpeed // Km/h const float KilometersPerHour = centimeterPerSecond * 0.036f; // M/s const float MeterPerSeconds = centimeterPerSecond * 0.0036f; const float IwantSpeedKMh = 10.0f; const float changeTouunit = IwantSpeedKMh / 0.036; //1 Unreal Unit = 1cm
https://programmers.co.kr/learn/courses/30/lessons/85002 코딩테스트 연습 - 6주차 복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요 programmers.co.kr 비교를 계속 이상하게 해서 좀 삽질을 했다. 그래서 조건을 저렇게 그대로 다 주석으로 씀 #include #include #include using namespace std; struct PlayerInfo { PlayerInfo() { playerIndex = -1; winRate = 0.0; betterMeCnt = 0; we..
1. 레코드 캡슐화 하기 : 가변 데이터라면 객체를 선호하자. 2. 컬렉션 캡슐화 하기 3. 기본형을 객체로 바꾸기 : 출력 이상의 기능이 필요해지는 순간 데이터를 표현하는 전용 클래스를 정의하는 편 4. 임시 변수를 질의 함수로 바꾸기 5. 클래스 추출하기 : 메서드와 데이터가 너무 많은 클래슨느 이해하기 쉽지 않으니 잘살펴보고 적절히 분리한다. 6. 클래스 인라인하기 :5번 추출하기의 거꾸로 돌리는 리팩터링이다. 두클래스를 하나로 합칠수도 있다는것 7. 위임 숨기기 : 모듈화 설계를 제대로 하는 핵심은 캡슐화이다. 8. 중개자 제거하기 : 7번 위임 숨기기의 반대 리팩터링 9. 알고리즘 교체하기
1. 함수 추출하기 2. 함수 인라인 하기 3. 변수 추출하기 4. 변수 인라인 하기 5. 함수 선언 바꾸기 6. 변수 캡슐화하기 7. 변수 이름 바꾸기 8. 매개변수 객체 만들기 : 여기저기에 나타나는 데이터 무리들은 모아서 객체로 만들어주는 게 낫다. 9. 여러 함수를 클래스로 묶기 : 비슷하게 사용되는 함수는 클래스로 묶는 게 낫다 10. 여러 함수를 변환 함수로 묶기 : 변환 함수는 원본 데이터를 입력받아서 필요한 정보를 모두 도출하고, 각각을 출력 데이터의 필드에 넣어 변환한다. 11. 단계 쪼개기 : 서로 다른 두 대상을 한꺼번에 다루는 코드를 발견하면 각각을 별개 모듈로 나누는 방법을 모색하자.
https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr #include #include #include #include using namespace std; string strTok(string& str,int& i) { string result; for( ;i
1. 기이한 이름 이름만 보고도 각각이 무슨 일을 하고 어떻게 사용해야 하는지 명확히 알 수 있도록 신경 써야 한다. 2. 중복 코드 똑같은 코드 구조가 여러 곳에서 반복된다면 하나로 통합하도록 한다. 3. 긴 함수 함수가 길어질수록 이해하기 어려워진다. 함수 이름을 잘 지어두기만 해도 본문 코드를 볼 이유가 사라진다. 그러니 적극적으로 함수를 쪼개도록 하자. 4. 긴 매개변수 목록 함수의 매개변수 목록이 길어지면 그 자체로 이해하기 어려워진다. 되도록 짧게 하는 게 좋고, 클래스가 그걸 도와줄 수 있다. 5. 전역 데이터 전역 데이터가 가변적이라면 다루기가 까다로워진다. 바뀌지 않는다고 보장하는 편이 낫다. 6. 가변 데이터 변수의 유효 범위가 짧으면 괜찮은데, 넓어진다면 그에 따른 위험도 커지게 된다..
리팩터링이란? - 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부구조를 변경하는 기법. - 리팩터링 하기 전과 후의 코드가 똑같이 동작해야 한다. - 리팩터링은 성능 최적화와 비슷하다. 코드를 변경하지만, 전반적인 기능은 그대로 유지한다. 소프트웨어 개발의 목적은 두 가지로 '기능 추가'인지, '리팩터링'인지를 구분해서 작업하는 게 좋다. '기능 추가', '리팩터링' 두 작업을 번갈아가면서 할 수는 있어도 동시에 안 하는 게 좋다. 리팩터링을 하는 이유? - 소프트웨어 설계가 좋아진다. 리팩터링을 하지 않으면 내부 설계(아키텍처)가 썩기 쉽다. - 소프트웨어를 이해하기 쉬워진다. 몇 달이 지난 누군가 내 코드를 수정하고자 읽을 때를 위함일 수도 있다. 어떻게 보면 나 ..
객체 지향 전문가들은 5가지의 뷰를 정의 하였다. 1. 유스케이스 뷰 외부 액터에 의해 인식되는 시스템의 기능 요구 사항을 보여주는 관점이다. 유스케이스 뷰는 사용자가 시스템으로부터 원하는 기능이 '무엇'인지를 정의하는 것이다. 다른 4개의 뷰가 '어떻게'하면 원하는 기능을 제공할 수 있는가에 관한것. 구분 UML 다이어그램 정적측면 유스케이스 다이어그램 동적측면 상태/순차/통신/활동 다이어그램 2. 설계 뷰 유스케이스 뷰에서 정의된 기능을 시스템이 제공하기 위해 어떤 클래스와 컴포넌트가 필요하고, 이들 클래스와 컴포넌트들이 서로 어떻게 이용하고 호출하는지에 중점을 둔다. 즉, 시스템 내부의 클래스와 컴포넌트를 파악해 기술. 구분 관심사항 이용되는 UML 다이어그램 정적측면 클래스 및 클래스 사이의 관계..
11. 입출력 최적화 파일 읽기 - 저렴한 함수 시그니처 만들기 - 호출 체인 짧게 만들기 - 재할당 줄이기 - 더 큰 입력 버퍼 사용하기 - 한번에 한줄씩 읽기 - 다시 호출 체인 짧게 만들기 파일 쓰기 - std::cin으로 읽어서 std::cout으로 쓰기 12. 동시성 최적화 - 멀티스레드 C++ 프로그램은 경쟁이 없는 경우 순차적으로 일관성이 있습니다. - 임계구역에서 I/O를 실행하면 최적의 성능을 이끌어내지 못합니다. - 실행 가능한 스레드 수는 프로세서의 코어 수보다 작거나 같아야 합니다. - 임계 구역을 짧게 만들기 위해 경쟁하는 스레드의 이상적인 개수는 2개입니다. 13. 메모리 관리 최적화 - 메모리 관리자보다 성능을 향상시킬 수 있는 좋은 장소가 있을지도 모른다. - 똑같은 크기를 ..