본문 바로가기

전체 글252

[C#/Unity][디자인패턴] 어댑터 패턴(Adapter Pattern) 1. 어댑터 패턴이란? - 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴. - 두 객체 사이의 래퍼 역할을 함. - 호환되지 않는 객체들이 협업할 수 있게 함. - 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴. - 하나의 객체에 대한 호출을 캐치하고 두 번째 객체가 인식할 수 있는 형식과 인터페이스로 변환시켜줌. 2. 어댑터 패턴을 사용하는 경우 - 버그가 없이 이미 존재하는 클래스를 재사용하는 경우 - 이미 만들어진 클래스를 새로운 인터페이스에 맞게 개조시키는 경우 - 오픈소스를 사용하거나 프로젝트 중간에 합류해서 작업해야 하는 경우 3. 어댑터 패턴의 장점 1) 호환성 : 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있음.. 2023. 11. 23.
[자기계발][글쓰기][책] 클루지 후기(Feat. 평점 2/5) 클릭해주셔서 감사합니다 :) 이 글은 개인적으로 읽은 책을 기억에 남기기 위한 독서 리뷰입니다. 리뷰할 책은 [개리 마커스]님의 [클루지]입니다. 평점 ⭐⭐ 2/5 (주관적인 기준입니다.) 책 정보 읽게 된 계기 이 책의 표지에도 나와있듯이 내가 전에 인상깊게 읽었던 '역행자' 의 저자 '자청' 님께서 추천해주신 책이어서 읽어보게 되었다. '역행자' 의 책 내용 중 '자청' 님은 어떤 부정적인 생각이 떠오를 때, 그 생각은 인간의 진화과정의 오류인 '클루지'라는 것을 인지하여 해당 생각을 무마시키고 이겨내는 과정을 거친다고 하셨다. 가령, 우리가 새로운 도전을 하고 중요한 결정을 내리는 것을 어려워 하면서 "아직 나는 부족해, 조금 더 준비하고 해보자" 와 같은 생각을 하게 되는 이유는 우리의 선조인 선.. 2023. 11. 19.
[C#/Unity][디자인패턴] 프로토타입 패턴(Prototype Pattern) 1. 프로토타입 패턴이란? - 어떤 객체에 대한 프로토타입을 만들어 놓고 그것을 복사해서 사용하는 패턴 - Clone을 이용하여 객체를 생성하는 방법 - 본래의 오브젝트의 복사본을 만들어 각 객체에 따라 데이터를 수정해주는 방식으로 오브젝트를 생성 - 기존에 생성된 객체를 이용하여 해당 타입의 객체를 생성 - 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정, 인스턴스는 새 객체를 만들기 위해 자기 자신을 복제 - 유니티에서는 Instantiate()가 같은 역할을 하도록 구현되어 있음. - 객체들을 그의 특정 클래스들에 결합하지 않고 복제할 수 있도록 하는 생성 디자인 패턴 2. 프로토타입 패턴을 사용하는 경우 - 비슷한 오브젝트를 지속적으로 생성해야 할 경우 - 클래스로부터 인스턴스 생성이 어려.. 2023. 11. 17.
[C#] 문자열 String, StringBuilder 차이점(feat 얕은 복사, 깊은 복사) ✍️먼저 아래의 간단한 C# 코드의 출력을 예상해보자. string s1 = "AA"; string s2 = s1; string s3 = string.Copy(s1); Console.WriteLine(s1); Console.WriteLine(s2); Console.WriteLine(s3); Console.WriteLine("-----------------------------------------------"); s1 = "ZZ"; Console.WriteLine(s1); Console.WriteLine(s2); Console.WriteLine(s3); Console.WriteLine("-----------------------------------------------"); string은 참조타입이므로.. 2023. 11. 17.
[C#/Unity][디자인패턴] 빌더 패턴(Builder Pattern) 1. 빌더 패턴이란? - 객체를 생성할 때, 그 객체를 구성하는 부분 부분을 단계별로 먼저 생성하고, 이를 조합함으로써 객체 전체를 생성한다. - 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴 - 생성자 오버로딩 - 복잡한 단계로 생성되는 생성자를 더 쉽고 가독성이 높게 생성할 수 있도록 고안된 패턴 - 편리함과 가독성에 중점을 두고 있어 성능상의 큰 차이는 없지만 작업능률에 큰 차이가 있을 수 있음. 2. 빌더 패턴을 사용하는 경우 - 오브젝트의 생성과정이 복잡할 때 이를 간단하게 만들기 위함 - 플레이어 캐릭터의 옷, 무기 등을 조합하고 장착하는 로직을 구현할 때 사용 3. 빌더 패턴의 장점 1) 편리함 : 객체를 생성하는 클래스에.. 2023. 11. 15.
[프로그래머스][C++][0단계] 문자열 묶기 #include #include #include using namespace std; int solution(vector strArr) { int answer = 0; vector count(31); for(int i = 0; i < strArr.size(); i++) { string curStr = strArr[i]; count[curStr.size()]++; } sort(count.rbegin(), count.rend()); answer = count[0]; return answer; } 1. 각 원소의 길이별 갯수를 담아놓을 벡터 count를 선언. 2. 원소의 최대 길이는 30이므로 벡터의 인덱스가 0부터 30까지 있어야 하기에 count의 크기는 31로 초기화 3. 주어진 문자배열 strArr를.. 2023. 11. 13.
[C#/Unity][디자인패턴] 추상 팩토리 패턴(Abstract Factory Pattern) 1. 추상 팩토리 패턴이란? - 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우 사용됨. - 관련 객체들의 구상 클래스들을 지정하지 않고도 관력 객체들의 모음을 생성할 수 있도록 하는 생성패턴 - 연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴. 2. 팩토리 메서드 패턴과의 공통점과 차이점 - 먼저, 추상 팩토리 패턴이 팩토리 메서드 패턴의 상위 호환이 아니라는 것에 주의! - 팩토리 메서드 패턴은 어떤 객체를 생성할 지에 집중하고, 추상 팩토리 패턴은 연관된 객체들을 모아둔다는 것에 집중함. - 조건에 따라 객체 생성을 팩토리 클래스로 위임하여 팩토리 클래스에서 객체를 생성하.. 2023. 11. 13.
[프로그래머스][C++][2단계] 다음 큰 숫자 #include #include using namespace std; int solution(int n) { // 1. n을 2진수로 변환했을 때의 1의 갯수 구하기 // 2. n+1부터 1씩 증가시켜가면서 2진수로 변환했을 때의 1의 갯수 구하기 // 3. n과 1의 갯수 비교후 같으면 해당 수를 리턴 int nCount = 0; while(true) { int count = 0; // 현재 수를 이진수로 바꿨을 때 맨 뒷자리 수부터 1인지 확인 for(int i = 0; (n>>i) > 0; i++) { // 시프트 연산을 이용해 나온 수가 홀수인지 판단하여 마지막 자리의 수를 확인할 수 있음. if(((n>>i) % 2) == 1) count++; } if(nCount == 0) nCount = c.. 2023. 11. 9.
[C#/Unity][디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern) 1. 팩토리 메서드 패턴이란? - 생성하는 공장은 단 한 개만 존재, 하지만 자식 클래스에 의해 여러 방식들로 구현 가능! - 객체를 생성하는 방법을 해당 클래스를 상속 받은 클래스에서 명시하도록 하는 패턴 - 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생설될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴 - 클래스에서 객체를 생성하기 위해 일반적으로 생성자를 만들지만 팩토리 메서드 패턴을 사용하면 이런 행위를 위임받아서 실행함. 2. 팩토리 메서드 패턴을 사용하는 경우 1) 코드가 높은 수준의 유연성을 제공해야 할 경우 2) 프로그램의 뼈대를 만들 경우 3) 추후 확장이 필요할 수 있는 경우 3. 팩토리 메서드 패턴의 장점 1) 유지보수 용이 : 객체의 생성을.. 2023. 11. 9.
[C#/Unity][디자인패턴] 싱글톤 패턴(Singleton Pattern) 1. 싱글톤 패턴이란? - 런타임 동안 "단 하나의 인스턴스만을 생성"하는 패턴 - 싱글톤 패턴이 적용된 객체는 하나의 인스턴스만 생성할 수 있고, 다른 객체에서 싱글톤 객체의 인스턴스를 생성하려 할 경우, 기존에 생성된 인스턴스가 있다면 해당 인스턴스를 반환하는 형태로 사용됨. - 모든 데이터를 전역으로 관리하여 쉽게 접근할 수 있게 하는 것 - 객체의 메모리를 정적으로 할당하여 하나의 객체에만 접근하는 방법 2. 싱글톤 패턴을 사용하는 경우 1) 공통된 객체를 여러개 생성해서 사용해야 하는 경우 2) 인스턴스가 절대적으로 한 개만 존재해야 한다는 것을 명시하고 싶은 경우 3. 싱글톤 패턴의 장점 1) 편리성 : 최초로 생성된 객체 하나에만 접근하게 되므로 데이터를 접근하고 수정하는데 용이함. 2) 중.. 2023. 11. 8.
[프로그래머스][C++][2단계] 숫자의 표현 #include #include using namespace std; int solution(int n) { int answer = 1; // 자기자신은 세고 들어감 if(n != 1 && n % 2 != 0) answer++; for(int i = 3; i 2023. 11. 7.
[개발더미][Unity] Post Processing - 흑백, 반전, 초점 조절 - 업그레이드 버전 1. Unity > Window > PackageManage의 Post Processing을 다운받아 사용한다. 2. 사용할 카메라에 Post-process Layer 컴포넌트를 추가한다. 3. Layer에 사용할 Layer를 추가(ex. Post process)하고, Post-process Layer 컴포넌트의 Layer를 해당 레이어로 설정 4. Hierarchy 창에서 마우스 우클릭> 3D Object > Post-process Volume 추가 5. Profile의 New 버튼을 눌러 새로운 Profile 생성 6. Add Effect > Unity > 이하 속성들 클릭 후 생성가능 ※ 버전이 올라가면서 유니티 자체에 내장기능으로 바뀌면서 적용법이 조금 달라졌다. 1. 카메라 자체에 Volume .. 2023. 11. 7.