전체 글 40

[코드규칙] 변수 네이밍 규칙

변수명을 작성할 때에는 아래의 규칙을 반드시 적용한다 본 포스팅의 변수 네이밍 규칙은 필자의 규칙이므로 옳고 틀림의 문제가 아님을 알려드립니다. 특징 가독성을 확보할 수 있다. 변수명만으로 의미를 설명할 수 있다. 협업시 코드에 대한 이해도를 높힐 수 있다. 규칙 const 변수는 모두 대문자로 표기하고 띄어쓰기를 '_'로 구분한다. // 비권장 public const double MaxHeight = 10; // 권장 public const double MAX_HEIGHT = 10; var을 사용하고 변수명을 통해 변수의 데이터 타입을 유추할 수 있도록 한다. // 비권장 string str = ""; // 권장 var str = ""; 복수형의 데이터는 -s를 붙혀 복수의 의미를 부여한다. // 비권..

[코드규칙] Partial 클래스 사용

클래스 내용이 길어지면 기능별 partial 클래스로 분리한다. 특징 기능별로 유지보수가 용이하다. (문제 발생시 추적 확인 용이) 파일명으로 클래스의 기능을 파악할 수 있다. 예시 나쁜 예) Restaurant.cs public class Restaurant { public void OrderFood() { ... } public void OrderWater() { ... } public void OrderAlcohol() { ... } public void OrderDesert() { ... } public void WashDish() { ... } public void WashCup() { ... } public void WashFork() { ... } public void WashKnife() ..

[코드규칙] 함수 생성 규칙

1 함수 - 1 기능 하나의 함수는 하나의 기능만 구현해야한다. 특징 함수명으로 역할 및 기능을 알 수 있다. 재사용성 증가 단위 테스트 용이 예시 나쁜 예) public class Person { public string Name { get; set; } public void SetNameAndExportToFile(string name, string filePath) { Name = name; using(var sr = new StreamReader(filePath)) { sr.WriteLine(Name); } } } static void Main() { var name = "james"; var path = @"D:\"; var person = new Person(); person.SetNameAn..

ConvexHull Algorithm (블록껍질 알고리즘)

정의 임의의 점들의 집합에서 해당 집합을 감싸는 가장 큰 외곽선을 찾는다. 구현 1) 여러 개의 점을 기준에 따라 정렬한다. var sorted = Sort(items, selector); 아래는 점들을 정렬하기 위한 함수이다. 가장 좌하단에 있는 점을 찾고, 그 점과 이루는 각에 따라 오름차순으로 정렬한다. 각도가 같을 경우에는 가까운 순으로 정렬한다. private static List Sort(IEnumerable items, Func selector) { // 좌하단 기준점 수집 var first = items .MinItems(item => selector(item).Y) .MinItem(item => selector(item).X); return items .OrderBy(i => GetDeg..

ReactiveUI

배경 MVVM 패턴을 자주 사용하는데 주로 Prism.MVVM 프레임워크의 BindableBase를 사용해왔다. 큰 불편함을 느끼지 못해서 그냥 사용해왔는데, 어느 날 회사 동료가 소개해준 ReactiveUI를 알게 된 후부터는 계속 ReactiveUI를 사용하고 있다. Prism.MVVM도 물론 굉장히 좋은 프레임워크임은 분명하나 ReactiveUI는 반응형으로 설계되어 있어 보다 직관적인 UI 작업이 가능하다. 또한 코드도 간결해지고 이해하기 쉬워진다. 오늘은 ReactiveUI를 소개해보고자 한다. ReactiveUI란? An advanced, composable, reactive model-view-viewmodel framework Declarative Describe what you want,..

Inversion Of Control Container, IUnityContainer

개요 Inversion Of Control Container(이하 IoC Container)를 활용하여 개발을 하면 굉장히 편리하다. Container에서 객체의 생성과 의존성 등을 관리하기 때문에 정작 개발을 하는 당사자는 각 객체에 대한 신경을 쓰지 않아도 된다. 오늘은 IUnityContainer를 사용한 IoC Container의 사용법을 설명해보고자 한다. 기본적으로 IoC Container를 사용하는 구조는 아래와 같다. 어떤 객체가 생성될 때 필요한 항목들을 Container에서 알맞게 꺼내쓰는 방식이다. DIP (Dependency Inversion Principle) IoC Container는 기본적으로 DIP(Dependency Inversion Principle)를 바탕으로 한다. 1..

MVVM 패턴 (Model - View - ViewModel)

MVVM 패턴은 처음 개발자로 입사하여 접했던 패턴이다. 개발을 처음 접했을 때는 전혀 이해가 안 되었지만 5년이 지난 지금은 가장 자신 있게 사용할 수 있는 패턴이기도 하다. 위키에서는 모델-뷰-뷰모델 - 위키백과, 우리 모두의 백과사전 모델-뷰-뷰 모델(model-view-viewmodel, MVVM)은 하나의 소프트웨어 아키텍처 패턴으로-마크업 언어 또는 GUI 코드로 구현하는-그래픽 사용자 인터페이스(뷰)의 개발을 비즈니스 로직 또는 백-엔드 로직( ko.wikipedia.org 정리 View : 사용자에게 제공되는 UI Model : 실제 데이터를 처리하는 구역 ViewModel : Model을 View에 표현하기 위한 중간 Model, View와 직접 바인딩되어 Model을 컨트롤하고 Mode..

Crawling (Selenium)

Crawling Crawl의 사전적의미는 "기어가다"라는 뜻이다. 개발에서는 웹 사이트의 정보를 긁어오는 것을 의미한다. 아마 웹 사이트를 기어다니면서 정보를 수집하는 행위가 아닐까..? Selenium 셀레늄 (소프트웨어) - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org Selenium은 코드에서 웹 접근과 제어에 대한 기능을 제공해주는 프레임워크이다. 이 프레임워크를 통해 Crawling을 수행할 수 있다. 예제 이론적인 설명은 이 정도까지만 하기로 하고 일단 해보기로 하자. Selenium Nuget Package .NET 환경에서 Crawling을 해보고자 한다. 먼저 Nuget Package에서 아래 항목을 추가해준다. Selenium.WebDriver Selenium.WebD..

MVC 패턴 (Model - View - Contoller)

이번에 ASP.NET을 공부하면서 MVC 패턴을 처음 접하게 되었다. 그동안 "이러한 아키텍쳐 디자인 패턴이 있다." 정도로 알고 있었으나, 이번 기회에 제대로 이해해보고자 정리했다. 위키에서는 모델-뷰-컨트롤러 - 위키백과, 우리 모두의 백과사전 모델, 뷰, 컨트롤러의 관계를 묘사하는 간단한 다이어그램. 웹 애플리케이션에서 일반적인 MVC 구성요소 다이어그램 모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 ko.wikipedia.org 정리 - Controller : View, Model 사이에 위치하며 두 요소의 연관 관계를 조절함. - View : Model을 사용자에게 Interface하는 역할. - Model : 데이터 또는 데이터에 대한 처리를..

코드리뷰에 관하여

코드 리뷰를 처음 접한 건 5년 전 개발자로 처음 회사에 입사하던 때였다. 그전까지 내가 겪은 거라곤 대학교 프로젝트가 전부였던 터라 협업에 대한 경험이 부족했었고, git, github 같은 협업 툴도 사용해본 경험이 별로 없는 상태였다. 처음 코드리뷰를 시작했을 때, 나는 굉장히 코드 리뷰에 어울리지 않는 사람이었다. 코드 PR을 요청하면 지적을 들을까 봐 스트레스를 받았고 상대 PR이 이해가 되지 않음에도 Approve 버튼을 누르곤 했다. 5년이 지난 지금, 코드리뷰는 일상이 되었으며 근거가 있는 어떠한 비판이나 지적도 열린 마음으로 받아들일 수 있다. 다른 사람의 코드도 구현하고자 하는 목표에 맞게 구현되었는지 볼 수 있게 되었다. 시간이 지나면 누구나 할 수 있는 것이 코드 리뷰인 것 같다. ..