닷넷 프로그래밍

LINQ 정리노트 (3)

2015. 6. 30. 10:04
거침없이 배우는 LINQ - 10점
Fabrice Marguerie 외 지음, 이준석 옮김/지&선(지앤선)

드디어 'Chap. 6 LINQ to SQL을 시작하기'로 접어들었다. LINQ에 관련한 서적답게 개발배경과 내부 구현 코드를 분석하면서 LINQ에 대해 자세히 소개하고 있다. 프로그래밍을 막 시작한 초보자에게는 너무 어려운 책이고 적어도 C#이나 VB.NET 문법에 익숙하고 ADO.NET을 이용해 DB 연동 프로그래밍을 해본 중급이상에게 적당한 난이도의 책이라는 생각이 든다. 실제로 LINQ에서 사용되는 Lambda 코드는 가독성이 그리 녹녹한 언어가 아니라는게 대다수의 의견인 듯하고, 업무에 실제 적용하기에는 문법적 지식 외에 커스터마이징이나 DataSet이나 Entity Framework와의 연합이 효율적이라고 책에도 나와 있는 만큼 내부 구현 코드와 SQL에 조금 정통할 필요가 있어보인다.

Chapter 6. LINQ to SQL 시작하기

p.253 ~ p.289

1. 객체 매핑

using System.Data.Linq.Mapping;

■ 속성 (Attribute) 사용

1) [Table] 속성

[Table] : 선언된 클래스와 테이블명이 같을 경우 자동 매핑

[Table(Name="table_name")] : 지정된 테이블을 선언된 클래스와 매핑

2) [Column] 속성

[Column] : 선언된 property 와 동일한 컬럼명일 경우 자동 매핑

[Column(Name="column_name")] : 지정된 컬럼을 property와 매핑

[Column(IsPrimaryKey=true)] : 기본키 지정. 테이블은 반드시 기본키를 포함.

[Column(CanBeNull=true)] : NULL 허용

2. DataContext

using System.Data.Linq;

: MS-SQL Server 연결

1
2
DataContext dataContext = new DataContext("ConnectionString");
Table<ClassType> obj = dataContext.GetTable<ClassType>();
cs

SQL Server에 연결하여 테이블에 저장된 데이터를 Table<> 형태의 기본 컬렉션 객체에게 전송

3. 객체 트리

개념모델 (Object 기반)과 논리모델(Table 기반)간 매핑

[Association] 속성(Attribute) 사용

1
2
[Association(OtherKey="RefPropertyName")]
public EntitySet<Type> ProrertyName { get; set; }
cs

4. 지연된 로딩

5. 즉시 세부정보 로딩
ToArray, ToDictionary, ToList, ToLookup 메서드 사용
DataLoadOptions = options; // Property 값 설정

6. 데이터 저장, 수정, 삭제
SubmitChange, UpdateOnSubmit, DeleteOnSubmit 메서드 사용


LINQ 정리노트 (2)

2015. 6. 25. 17:41
거침없이 배우는 LINQ - 10점
Fabrice Marguerie 외 지음, 이준석 옮김/지&선(지앤선)

표준 질의 연산자

 종류

 질의 연산자

 선별(filtering)

 OfType, Where

 투영(Projection)

 Select, SelectMany

 분할(Partitioning)

 Skip, SkipWhile, Take, TakeWhile

 조인(Join)

 GroupJoin, Join

 병합(Concatenation)

 Concat

 순차정렬(Ordering)

 OrderBy, OderByDescending, Reverse, ThenBy, ThenByDescending

 그룹화(Grouping)

 GroupBy, ToLookup

 집합연산(Set)

 Distinct, Except, Interset, Union

 변환(Conversion)

 AsEnumerable, AsQueryable, Cast, ToArray, ToDictionary, ToList

 동치성(Equality)

 SequenceEqual

 개체 선택(Element)

 ElementAt, ElementAtOrDefault, First, FirstOrDefault, Last, LastOfDefault, Single, SingleOrDefualt

 생성(Generation)

 DefaultIfEmpty, Empty, Range, Repeat

 계량화(Quantifiers)

 All, Any, Contains

 누적연산(Aggregation)

 Aggregate, Average, Count, LongCount, Max, Min, Sum


질의 표현식 작성

from [ type ] id in source // from으로 시작하고
[ join [ type ] id in source on expr equals expr [ into id ] ] // 여러 개의 from, let, where 문 등이 올 수 있다.
{ from [ type ] id in source | let id = expr | where condition }
[ orderby ordering, ordering, ... ] // 필요에 따라 사용
select expr | group expr  by key // select 또는 group by로 끝난다.
[ into id query ] // 필요에 따라 사용

LINQ 정리노트 (1)

2015. 6. 24. 15:52

LINQ (Language INterated Qeury)는 Microsoft사에서 개발한 ORM 프레임워크로 데이터베이스 뿐만 아니라 XML이나 심지어는 시스템 자원까지 객체로 표현되는 다양한 자원을 표준화된 프로그래밍 언어로 접근하기 위한 기술이다.

거침없이 배우는 LINQ - 10점
Fabrice Marguerie 외 지음, 이준석 옮김/지&선(지앤선)

먼저 LINQ의 구현에 도움이 되는 C# 3.0부터 지원하기 시작한 문법 내용을 살펴보도록 하겠다.

1. 로컬 변수의 암시적인 형 선언

C#은 엄격한 형(type)을 지원하지만 var 키워드를 통해 로컬 변수를 형선언 없이 사용할 수 있다. 하지만 초기화 식으로 형을 지정해야 한다는 점에서 VB.NET의 variant와는 다르다.

2. 객체와 컬렉션 초기화 함수 (object initializer)

별도의 초기화 코드를 작성하지 않고 초기화 함수를 이용하여 모든 객체를 초기화할 수 있다. 객체와 컬렉션의 초기화가 가능하며, 컬렉션의 경우 System.Collections.IEnumerable만 제대로 구현되어 있으면 다양한 종류의 컬렉션을 초기화할 수 있다.

3. 람다 표현식 (lambda expression)

C# 1.0부터 제공된 대리자는 C# 2.0에서 익명메서드를 통해 대리자를 다룰 수 있도록 개선되었다. C# 3.0에서는 람다 표현식을 사용하여 표현이 더욱 간단해졌다.

4. 확장 메서드 (extension method)

C# 3.0에서 지원되기 시작한 문법으로 IDE의 인텔리전트 기능을 활용할 수 있도록 해주며, 문법적으로 가독성이 높은 코드 작성이 가능하도록 해준다.

.NET Framework Class Library 확장 메서드인 Where(), OrderByDescending(), Select() 등을 연쇄사용(chaining)이나 파이프라인(pipeline) 패턴을 적용하여 문법적으로  편리하게 사용할 수 있도록 지원한다.

5. 익명형 (anonymous type)

정보를 간단히 객체화해 저장할 경우 임시 저장 목적을 위해 특정형을 정의하고 사용하는 번거로움을 줄여준다.



실습을 위해 Northwind 샘플 데이터베이스를 다운받아 압축을 푼다.

Northwind 샘플 내려받기

MS-SQL이 설치되었들 경우 (MS-SQL 2008 R2 - Express Edition 설치) SQL Server Management Studio를 이용하여 내려받은 Northwind.bak 파일을 복원한다.


ASP.NET은 분명 웹프로그래머들에게는 획기적인 발판을 만들어줬다. 물론 ASP로 먹고 사는 개발자들에게는 말이다. PHP나 Java 진영의 프로그래머들, 그리고 Ruby와 Python 프로그래머들에게는 각자의 개발철학에 따라 무겁고 비효율적이며 비싸기만한 개발환경이었다.

Ruby진영의 Rails와 Java진영의 Strusts와 Spring 같은 재미있고, 강력하면서도 가벼운(?) MVC 프레임워크에 대한 요구에 드디어 MS도 첫발을 내딛기 시작했다. 하지만 여전히 닷넷프레임워크는 윈도우즈 환경에서만 사용가능한 기술이며, MS의 틀을 벋어날 수 없는 경직된 면모를 갖고 있다.

하지만 최근들어 닷넷프레임워크와 개발툴을 오픈소스 및 공개로 전환하고 가상환경을 제공하는 강력한 개발환경을 발표하는 등 천재가 아니면 쓰지 않는다는 빌게이츠의 말이 빈말이 아니었다는 걸 증명이라도 하는 듯한 분위기이다.

학교로 직장을 옮기기 전에는 Java/JSP. Struts, MyBatis 등 Java 진영에 충실한 길을 걷다가 교내 개발된 웹서비스의 유지와 개발을 위해 ASP.NET을 본격적으로 익히고 있다. 몇몇 서비스는 Visual Studio .NET 2003 개발툴과 닷넷프레임워크 1.1 환경에서 개발되어 아직까지 사용하고 있는 레거시 시스템이어서 개편을 위해 ASP.NET MVC / Linq를 적용해 볼 계획이다.

ASP.NET MVC 버전과 발표일

 ASP.NET MVC 버전

 발표일

 ASP.NET MVC CTP

 2007.10.10.

 ASP.NET MVC 1.0

 2009.03.13

 ASP.NET MVC 2 RC

 2009.10.16.

 ASP.NET MVC 2 RC 2

 2010.02.04

 ASP.NET MVC 2

 2010.03.10.

 ASP.NET MVC 3 Beta

 2010.10.06

 ASP.NET MVC 3 RC

 2010.11.09.

 ASP.NET MVC 3 RC 2

 2010.12.10.

 ASP.NET MVC 3

 2011.01.13.

 ASP.NET MVC 4 Developer Preview

 2011.09.20.

 ASP.NET MVC 4 Beta

 2012.02.15.

 ASP.NET MVC 4 RC

 2012.05.31.

 ASP.NET MVC 4

 2012.08.15.

 ASP.NET MVC 4 4.0.30506.0

 2013.05.30.

 ASP.NET MVC 5 Preview

 2013.06.26.

 ASP.NET MVC 5 RC 1

 2013.08.23.

 ASP.NET MVC 5

 2013.10.17.

 ASP.NET MVC 5.1

 2014.01.17.

 ASP.NET MVC 5.1.1

 2014.02.10.

 ASP.NET MVC 5.1.2

 2014.04.04.

ASP.NET MVC 안정버전과 지원하는 비주얼스튜디오 및 닷넷프레임워크 버전

ASP.NET MVC 1 - 비주얼스튜디오 2008과 비주얼스튜디오 2008 서비스팩1 (닷넷프레임워크 3.5)

ASP.NET MVC 2 - 비주얼스튜디오 2008과 비주얼스튜디오 2010 (닷넷프레임워크 3.5과 4.0)

ASP.NET MVC 3 - 비주얼스튜디오 2010 (닷넷프레임워크 4.0)

ASP.NET MVC 4 - 비주얼스튜디오 2010 서비스팩1과 비주얼스튜디오 2012 (닷넷프레임워크 4.0과 4.5)

ASP.NET MVC 5 - 비주얼스튜디오 2013 (닷넷프레임워크 4.5와 4.5.1)

MS는 알게 모르게 오픈소스에 적극 참여하는 모습을 보여왔다. 하지만 그런 MS의 모습이 기여라기 보다는 지배를 위한 포석으로 비쳐졌고 실제로 시장에서 지배자로 군림하는 일관된 적략을 펼쳐왔다.
이번 공개전략이 비록 닷넷의 정체로 인한 위기감에서 나왔겠지만 아무쪼록 업계의 그루로써 지배자가 아닌 리더로써 후원자의 모습으로 큰 힘을 발휘해주길 기대한다.

http://www.visualstudio.com/news/vs2013-community-vs



+ Recent posts