Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
* 김영한님의 스프링 핵심원리 기본편 강좌를 수강하며 정리한 글입니다. * 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 이전 글에서는 다형성(인터페이스)만으로는 OCP, DIP를 지킬 수 없는 이유를 정리하였다. 이번에는 이를 해결할 수 있는 구성 영역과 실행 영역의 분리, 그리고 DI(Dependency InJection)과 컨테이너 기술을 살펴보자. 생성자 주입과 DI(의존관계 주입) 역할(배역, 인터페이스)과 구현(배우, 구현체)을 분리했다면, 구현체가 다른 역할의 구현체를 직접 선택하는 것은 배우가 직접 상대 배우를 선택하..
싱글톤은 디자인 패턴 중에 하나로 단 하나의 객체만을 사용하도록 강제하는 기법이다. 자바에서 이는 static 키워드로 간단히 구현 가능하다. static 변수와 static 메서드 일단 자바에서 static은 클래스의 변수, 메서드에 자주 사용이 된다. static 변수의 경우 해당 클래스의 객체에서는 메모리 할당이 단 한번만 진행되기 때문에, 모든 객체가 같은 값이 이용된다. 위의 코드에서 Memory class 의 static 변수 memory는 객체 mem1과 mem2에서 공유된다. 따라서 mem1에서 save를 한 값을 mem2에서도 찾아올 수 있다. static 메서드는 객체의 생성이 없이도 클래스를 통해 직접 호출이 가능하다. 위의 코드에서는 getMemorySize()가 static 메서드..
* 김영한님의 스프링 핵심원리 기본편 강좌를 수강하며 정리한 글입니다. * 스프링의 탄생 스프링의 명칭 자체는 자바 진영의 새로운 시작을 의미하는 것으로 문자 그대로 봄을 뜻한다. 과거 자바 진영의 표준이었던 EJB는 복잡함 때문에 많은 개발자들이 녹아내렸다... 표준이 이 모양이다 보니, 많은 개발자들이 좀 더 편리한 기능들의 자바 오픈 소스 프로젝트를 발표했고, 스프링도 이중에 하나였다. 스프링은 단 하나의 기술을 말하는 것이 아닌 여러 기술들의 생태계를 의미한다. 이중에서도 스프링 프레임 워크와 스프링 부트가 가장 중요한데, 대부분 스프링의 공부는 스프링 프레임워크를 배우는 것을 의미한다. 스프링 프레임워크의 핵심 기술은 DI 컨테이너, AOP 등이 존재하는데, 이에 대한 설명을 아래에서 진행하겠다..
테스트 주도 개발이란? 게임을 개발해 보면서 점점 많아지는 코드량에, 함부로 특정 함수를 변경했다가 양산될 버그가 두려워지기 시작했다. 덩달아 생산성도 떨어지고 뭐부터 만들어야 할지 막막해졌다. 이럴 때 필요한 게 바로 테스트 주도 개발(TDD, Test Driven Development)이라 생각했다. 실무에서 프로그래머들은 실제로 코드를 작성하는 시간보단 설계의 고민, 디버깅에 대부분의 시간을 쏟는다. 특히 디버깅이 얼마나 끔찍한지는 초심자라도 잘 알 것이다. 하지만, 테스트 코드 어떤 부분에서 버그가 발생했는지 한 번에 알 수 있다. 물론 개발에 직접적인 코드를 작성하는 것이 아닌 부가적인 코드를 상당량 작성해야하는 것이기 때문에 부담을 느낄 수 있다. 실제로 (본인도 그렇지만) 테스트가 오히려 개..
유니티에서 마우스가 오브젝트에 진입하거나 클릭함에 따라 원하는 동작을 하게 만들고 싶은 경우 편리하게 사용할 수 있는 것이 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년 내의 시간 안에 빠르게 스킬을 익히고 취업을 하는 것에 목표를 두고 있다. 고용노동부가 지원하는 만큼 프로그램에서 많은 사람들이 취업에 성공하는 것이 중요하겠지만, 새로운 기술들이 빠르게 등장하고 사라지는 업계에서는 쉽게 익힌 기술일수록 쉽게 ..