본문 바로가기

C# 3.0

Umc.Core 프레임워크 다이나믹 프록시(Dynamic Proxy) #1 요즘 참 할일도 많은데 할 수 있는 일이 점점 줄어든다. 필자는 블로그 버킷 리스트(bucket list)를 작성하는데 블로그가 사망하기 전에 꼭 해야 할 일을 목록으로 만들어 놓고 하나 하나씩 글을 써 나간다. 근데 할 일이 늘어만 간다. ㅠ 당장 쓸 수 있는 글 39개 사소한 개발 기술부터 심도있는 내용으로 흐리멍텅한 개념을 글을 쓰면서 잡아 나가는 것들 개발 후 산출물로 쓸 글 37개 오픈소스로 내놓을 계획, 또는 알고 있는 것들에 대한 증명이 필요하고 그 후에 쓸 수 있는 글 연구개발 11개 배우고 싶은 것, 하고 싶은 것, 해야 하는 것들이고 공부해야 쓸 수 있는 글들 아무튼 점점 쓸 것들이 늘어만 가지만, 하나 하나 하다보면 쓸게 없어 지는 날이 올거라 믿는다 >.,< #1 - Umc.Core.. 더보기
[C# 3.0] LINQ to Sql 의 쿼리를 로그로 남겨보자 이미 C# 3.0 에서 LINQ to Sql 란 말은 자주 들어 보았을 것이다. 많은 세미나 또는 블로그 포스트에서 LINQ to Sql 의 쿼리가 MSSQL 프로필러를 통해 실행되는 모습을 익히 보았을 것이다. 하지만 LINQ to Sql 을 이용하여 쿼리가 되는 것을 기록할 필요가 있다. 쿼리가 수행되는 시간, 쿼리 되는 빈도나 부하 등을 유지보수 하기 위해서 반드시 이 쿼리들이 로그에 기록되어야 한다. 그럼 오늘은 이 LINQ to Sql 이 어떻게 로그를 남기고 어떻게 로그에 기록하면 될지 알아보자. 먼저 콘솔 프로젝트를 만들어보자. 우선 LINQ to Sql 항목을 추가하고, [그림1] 과 같이 서버탐색기를 통해서 데이터베이스의 테이블을 끌어놓자. 여기서 사용하는 테이블은 UmcBlog 실제 웹.. 더보기
LINQ To Sql 의 올바른 사용 LINQ TO Sql 은 데이터베이스를 엑세스 하고 쿼리하는데 데이터베이스와 어플케이션간에 많은 장벽을 없애버렸다. 바로 어플케이션에서 쉽게 SQL 쿼리를 사용할 수 있기 때문이다. 하지만, 이와 같이 장벽이 사라진 만큼 데이터베이스와 어플케이션의 더욱 더 깊은 이해가 요구 되어야 더욱 더 섬세하고 좋은 성능을 낼 수가 있을 것이다. 일반적인 데이터엑세스 과정 대략 위와 같은 논리적인(또는 물리적인) 3 Layer 형태가 갖추어 질 것이다.(위 그림 정말 못그렸다.;;) 그렇다면 LINQ TO Sql 의 사용은 Data Access Layer 가 가장 적절할 것 같다. LINQ TO Sql 클래스를 만들어, 비쥬얼하게 멋진 다이어그램과 사용할 프로시져를 끌어다 놓는 것 만으로 SqlParameter 를 .. 더보기
확장 메서드의 설계(Architect) 우리는 C# 3.0 에 확장 메서드(Extension Methods) 가 언어적으로 지원된다는 말은 수없이도 들어보았다. 확장 메서드는 기존 C# 2.0 에 비해 굉장히 파격적이다. 추후 확장 프로퍼티와 확장 이벤트 등도 지원된다고 하니, 가히 언어적으로 파격적이다. 확장 메서드의 문제점 확장 메서드는 굉장히 파격적이다. 내가 C# 2.0 을 하면서 감히 이런 언어적 지원이 가능하리라곤 상상도 못했으니 그 아이디어 적이 면만으로도 충분히 놀랄만 하다. 확장 메서드는 원본 타입의 Type 에 따라 지원된다. 하지만, 자주 사용되는 string, int, bool 등과 같은 타입에 확장 메서드를 추가하게 되고, 프레임웍이 커짐에 따라 이런 확장 메서드의 양도 무한대(?)로 커질 가능성이 충분히 있다. 확장 .. 더보기
람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2] [.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [1] [.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2] 지난 아티클에서 우리는 List 컬렉션에 특정 요소를 탐색하기 위해 delegate 와, 익명 메서드, 람다식을 이용한 방법을 알아보았다. List 컬렉션의 Find와 FindAll 메서드는 List 클래스가 제공하는 메서드지만, 이와 비슷한 확장 메서드를 손수 구현해 보도록 할 것이다. 이번에도 다음의 List 컬렉션의 데이터를 가지고 예제를 만들어 볼 것이다. List arr = new List(); arr.Add(1).. 더보기
람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [1] [.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [1] [.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2] C# 3.0 에서 LINQ 를 위해 많은 언어적 개념이 도입되었다. 확장 메서드(Extension Methods)와 Lambda Expression 등이 바로 그것이다. 그중 Lambda Expression(이하 람다식) 은 Ruby 에서 먼저 나왔다고 하지만, C# 3.0 에서의 람다식은 LINQ 와 확장 메서드와 굉장히 사슬처럼 엮여 있는 듯한 모습이다. 람다식은 대리자(Delegate)와 제네릭 메서드의 복잡한 식을 .. 더보기
LINQ 의 OUTER JOIN 작업 LINQ 를 이용한 OUTER JOIN 을 해보자. 이번 강좌를 지난 강좌에 이어 LINQ to SQL Classes 항목을 추가 하여야 한다. 이부분에 대해서는 다음의 URL 을 참고하기 바란다. [.NET/C# 3.0] - LINQ to SQL Classes 와 LINQ의 JOIN 작업 http://umc.pe.kr/article/2007/09/02/LINQ-to-SQL-Classes-AND-LINQ-JOIN.aspx 우선 우리가 원하는 SQL 쿼리식을 보자 SELECT A.ArticleNo, C.Content, C.InsertDate FROM Article A LEFT OUTER JOIN Comment C ON C.ArticleNo = A.ArticleNo ORDER BY C.InsertDate D.. 더보기
LINQ to SQL Classes 와 LINQ의 JOIN 작업 LINQ 의 JOIN 기존 C# 2.0 의 Typed DataSet 의 개념과 LINQ 가 결합하여 LINQ to SQL Classes 라는 이름으로 굉장히 강력한 기능을 제공한다. LINQ, 람다식, 익명 형식에 대한 내용은 다음의 URL 을 참고 하세요. 2009-06-20 아래의 경로로 접속할 수 없습니다. LINQ의 발전과 C# 설계에 미치는 영향 http://umc.pe.kr/article/2007/09/02/Future-LINQ.aspx LINQ to SQL Classes 항목 만들기 [새 항목 만들기] 에서 LINQ to SQL Classes 를 만든다. 그럼 .dbml 확장자를 가진 몇가지 파일과 디자이너 화면이 나타나게 된다. 여기서 사용하게 될 데이터베이스는 UmcBlog 소스와 함께 .. 더보기
XDocument 클래스와 LINQ XDocument 클래스 Framework 3.0 에 들어서면서 새로이 등장한 클래스이다. 그 이전 Framework 1.1, 2.0 에서 XML 작성을 해보았다면, 그 노가다와 다름없는 코딩을 해보았을 것이다. XmlDocument 또는 XmlTextWriter, XmlTextReader 클래스 사용하여 편리하게 XML 작업을 했다. XmlDocument 는 DOM 과 같은 형태로 작업이 가능하며, 빠른 탐색이 장점이다. XmlTextWriter 와 XmlTextReader 는 Inline 작업이 가능하며, 간결한 사용법이 장점이었다. 기존 XmlTextWriter 로 XML 만드는 일반적인으로 작업하는 예 하지만, 오늘 XDocument 클래스를 알게된다면, 위 두 클래스를 쳐다도 안보게 될 상황이 .. 더보기
확장 메서드( Extension Method ) 확장 메서드(Extension Method) 이름만 들어보아도 뭔가 심오한 분위기가 물씬 풍긴다. 쉽게 말하자만, 기존의 클래스를 확장한다고 해야할까? 만약, 클래스의 메서드를 확장하기 위해선 상속을 하고, 상속한 클래스에서 메서드를 선언하여 확장하는 방식이었다. 하지만 Framework 3.0 에서는 더 이상 메서드의 확장을 위해 클래스의 상속이 필요가 없다. 시작하기 심플한 샘플부터 보도록 하자. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleTest1 { class Program { static void Main(string[] args) { string url .. 더보기