Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
유니티에서 마우스가 오브젝트에 진입하거나 클릭함에 따라 원하는 동작을 하게 만들고 싶은 경우 편리하게 사용할 수 있는 것이 IPointerHandler 인터페이스이다. C#에서 인터페이스는 MonoBehaviour와 같이 상속하고 인터페이스 안에 존재하는 추상화 함수를 구현하면 사용할 수 있다. 대표적인 IPointerHandler는 오브젝트의 내부에 마우스 포인터가 들어왔는지 파악하는 IPointerEnterHandler이다. 이 인터페이스를 사용하기 위해서는 void OnPointerEnter() 함수를 구현해야한다. 오브젝트에 마우스 포인터를 올리면 윤곽선이 드러나는 코드를 살펴보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 using S..
처음에 enum을 접했을 때 도대체 왜 쓰는지 몰라서 당혹했던 기억이 있다. 하지만 상수가 많이 사용되는 상황에서는 이만큼 편리한 자료형이 없다!! 다음과 같이 이름을 나열하면 기본적으로 정수 숫자의 상수형이 된다. 1 2 3 4 5 6 enum StageName { start, middle, end } cs 따라서 start = 0, middle = 1, end = 2를 나타내게 된다. 열거형도 하나의 자료구조(struct 혹은 class)라고 생각하고, 사용할 때는 열거형명.키워드 로 사용할 수 있다. (ex: (int)StageName.start == 1) 단, IDE가 enum의 값마다 형식을 인식하지 못하므로 형식이 int값이라면 (int)로 형변환하여 사용해야 한다. 연속된 정수가 아닌 값을 ..

유니티에서 보통 오브젝트를 움직이거나 서서히 변화를 주기 위해서 프레임 단위마다 실행되는 Update() 함수에 코드를 작성한다. Update는 프레임마다 실행되는 만큼 대부분의 작업을 의존하게되면 프레임 드롭같이 최적화 문제가 발생한다. 간단한 루틴 작업이라면 Coroutine으로 대체할 수 있다. Coroutine은 Update와는 독립적인 서브 루틴으로 IEnumerator 형식의 함수로 선언한다. 코루틴 함수는 진행되면서 맞닥뜨리는 yield return 행마다 실행을 중지하고, 다음 프레임부터 중지한 다음 시점부터 다시 실행한다. 기본적으로는 바로 다음 프레임에 다음 구문이 다시 실행되기 때문에 Update와 다르지 않지만, WaitForSeconds 함수를 이용해 지연 후 구문을 다시 진행시킬..

프로젝트 중에 Awake()와 Start()의 차이를 제대로 인지하지 못하여 발생한 오류에 대해 설명해 보겠다. 일단 MonoBehaviour.Awake() 와 MonoBehaviour.Start()는 위와 같은 순서를 가진다. 빈번히 사용하는 Update()와 달리 Awake()와 Start()는 Initalization 구역으로 스크립트의 초기화에 이용된다. 단, 호출의 순서는 Awake() -> Start()로 Awake()가 먼저 호출되는데, 둘의 차이는 Awake는 모든 오브젝트가 초기화되고 호출되고, Start는 스크립트 인스턴스가 활성화된 경우에만 호출된다는 점이다. 간단히 말하면, Awake는 항상 Start 함수의 이전 및 프리팹의 인스턴스화 직후에 호출 Start는 첫 번째 프레임의 업..

다중 상속의 다이아몬드 문제 유니티에서 생성하는 스크립트들은 기본적으로 MonoBehaviour를 상속하고 있기 때문에 다른 클래스를 상속할 수가 없다. 이는 다이아모드 문제로 인해, C#이 다중 상속을 지원하지 않기 때문이다. 다이아몬드 문제란 다중 상속 시 오버라이딩한 메서드의 호출 모호함에서 발생한다. 예를 들어 C#에서 다음과 같이 다중 상속을 진행했다고 생각해보자. Child 클래스는 ParentA와 B를 다중 상속하고 있다. 이때 상위의 Work() 메서드를 호출하는 base.Work()를 호출하면 ParentA의 Work()가 실행돼야 할까? 아니면 ParentB의 Work()가 실행되어야 할까? 이처럼 호출의 모호함에서 발생하는 문제는 상속 형태가 다이아몬드를 닮아 다이아몬드 문제라고 부른..
https://woowacourse.github.io/ 우아한테크코스 우아한테크코스에서 개발자들을 위해 디자인된 강의를 수강해보세요. woowacourse.github.io 줄여서 흔히들 우테코라고 줄여 말하는 우아한 테크 코스는 배달의 민족에서 지원하는 SW 인재 양성 프로그램이라 할 수 있다. 단, 다른 SW 지원 프로그램과는 다른 점이 있다. 보통 국비를 지원받는 K-Digital Training 은 프로그래밍에 익숙하지 않는 사람들을 처음부터 교육시켜 1년 내의 시간 안에 빠르게 스킬을 익히고 취업을 하는 것에 목표를 두고 있다. 고용노동부가 지원하는 만큼 프로그램에서 많은 사람들이 취업에 성공하는 것이 중요하겠지만, 새로운 기술들이 빠르게 등장하고 사라지는 업계에서는 쉽게 익힌 기술일수록 쉽게 ..

문제 https://leetcode.com/problems/spiral-matrix/ Spiral Matrix - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 난이도: Medium 재귀 형식으로 해결한 문제. 행렬을 나선형 순서로 돌아가기 위해서는 결국에는 외각을 한 바퀴 돌고 한 칸 안쪽에서 다시 한 바퀴 도는 것을 반복하게 된다. 따라서 재귀로 표현하기 적합하다. 한 칸의 외각의 범위를 표현하기 위해서는 단 두가지 점인, 왼쪽 위(left top)와 ..
*본 게시물은 [클린 코드] 와 [실용주의 프로그래머] 서적에서 배운 것 들을 잘 활용하기 위해 정리한 글입니다. *문제시 삭제하겠습니다. 자료 추상화 조회(get)와 설정(set) 함수를 제공한다면 클래스의 구현은 전혀 감춰지지 않는다. 인터페이스나 조회, 설정 함수만으로는 추상화가 이뤄지지 않는다. 자료와 객체의 비대칭 자료 구조는 자료를 그대로 공개하며 별다른 함수를 제공하지 않는다. 반면에 객체는 추상화로 자료를 숨기고, 자료를 다루는 함수만 공개한다. 물론 객체만이 장점을 가지는 건 아니다. 서로는 상반되는 장점과 단점을 가진다. 절차 지향 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class Square{ public Po..
*본 게시물은 [클린 코드] 서적에서 배운 것 들을 잘 활용하기 위해 해당 서적을 정리한 글입니다. *문제시 삭제하겠습니다. 클래스의 체계 변수 목록이 가장 먼저 나오며, 추상화 단계의 순서대로 작성한다. static과 public 상수 다음으로 정적 비공개 변수, 마지막으로 비공개 변수 순서를 지키자. (공개 변수는 사용할 일이 거의 없어야 한다.) 비공개(private) 함수는 자신을 호출하는 공개(public)의 직후에 작성하자. 캡슐화 캡슐화를 해제하는 결정은 언제나 최후의 수단이어야 한다. 함수를 만드는 규칙은 첫번째도 작게, 두 번째는 더 작게이다. 이는 클래스에서도 동일하다. 함수는 실질적인 라인수로 측정을 할 수 있었다면, 클래스에는 다음과 같은 측도가 있다. 단일 책임 원칙 (Single..

문제 https://leetcode.com/problems/set-matrix-zeroes/ Set Matrix Zeroes - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 난이도: Medium 단순히 새로운 2차원 배열에 값을 복사해 넣으면서 만들면 굉장히 쉽지만 O(mn)의 공간 복잡도가 소요된다. 공간 복잡도를 최적화하는 다른 방법으로는 각 row와 column이 0으로 채워져야하는지 여부를 O(n + m) 공간으로 저장은 가능하지만, 문제에서는 i..