본문 바로가기

ETC Programmings

(80)
ASP.NET 페이지 수명 주기 개요 ASP.NET 페이지가 실행되면 이 페이지는 정해진 처리 단계를 수행하는 수명 주기를 거치는데 이런 주기를 잘 이용해야 페이지가 올바르게 동작하는 것을 기대할 수 있다. Control들의 수명 주기는 페이지의 수명 주기를 기반으로 하고 페이지는 Control에 대해서 많은 이벤트들을 발생시킨다. 일반적인 페이지 수명 주기 단계 Page Request : 페이지 요청 수명 주기가 시작하기 전 단계. 사용자의 요청을 통해서 페이지를 컴파일 하고 페이지 주기를 시작할 지의 여부를 결정한다. (시작하지 않아도 되는 경우는 캐시된 페이지가 있는 경우) Start : 시작 Request, Response 와 같은 속성을 설정하고 페이지 요청이 PostBack 인지를 확인하여 IsPostBack 속성, UICultu..
ASP.NET Performance Tips http://weblogs.asp.net/haroonwaheed/ASP.NET-Performance-Tips 페이지의 번역, 요약 Remove Unused HTTP Modules (불필요한 HTTP Module의 삭제) HTTP Modules 은 사용자로부터 각각의 Request를 전달 받을 때 마다 Intercept 를 하게 된다. 그리고 생각보다 많은 Module들이 선언되어 있는 경우가 종종 있는데, 이런 경우에는 불필요하게 선언되어있는 모듈들을 솎아내면 성능 향상에 도움을 준다. 다음 항목 : 을 사용하지 말 것 Product 레벨로의 배포를 할 때 정말 쉽게 볼 수 있는 이 구문은 성능 하락에 엄청난 영향을 준다. 이는 ASP.NET 페이지의 컴파일 시간을 더 걸리도록 하고 디버깅을 위해 코드 ..
[C#] LINQ 의 사용 LINQ를 사용해 보기 위해서 DB를 사용해보려는 시나리오가 있었지만 사실상 C#에서의 DB 접속을 위한 ADO.NET 이라는 부분은 배우지 못했기에 Collection 객체인 List 를 사용했다. SNACK 이라는 테이블을 조회한다고 가정을 하는 시나리오로 구성을 했다. 1. SNACK 테이블의 PRICE 열의 값이 500을 초과하는 레코드들을 출력한다. 2. SNACK 테이블의 PRICE 열의 값이 500을 초과하는 레코드의 갯수를 출력한다. 3. SNACK 테이블의 PRICE가 가장 큰 레코드의 NAME 과 PRICE를 출력한다. 4. SNACK 테이블의 모든 레코드를 XML의 형태로 가져온다. class Program { static void Main(string[] args) { List sn..
[C#] LINQ (Language Integrated Query) : 새로운 시도 LINQ 라는 것에 대해서 개괄적인 내용만 봤을때는 어땠든 Data 를 핸들링하는 기술임에는 틀림없다고 여겼다. 실제로 .NET 3.5 에서 부터 추가된 꽤 최신의 기술이다. 새로운 통합을 통해서 새로운 표준이 되려고 하는 시도가 보이는 다소 야심찬 기술이 바로 이 LINQ 라고 볼수 있다. 어떠한 데이터의 집합들을 LINQ 라는 한가지의 언어를 통해서 .NET Framework 를 사용하는 모든 언어에서 사용하도록 하는 시도이다. SQL 과 더불어 또 다른 표준이 되려는 시도가 보인다. 이런 좋은 시도에도 불구 하고 내가 공부하기 위해 보고 있는 교재에서는 LINQ를 배우기 이전에 이 기술의 허와 실을 낱낱히 공개한다. 결국은 Language에서 항상 화두가 되는 문제인 Coupling(결합도), Co..
[C#] 3.0 의 새로운 기능들 w4wawwwaaC# 에는 자바와는 다른 기능들이 많이 있다. 좀더 융통성있고 개발자 편의적인 부분이 있다. 그중에서 코드의 생산성을 높이고 조금 더 개발을 수월하게 해주는 C# 3.0의 새로운 기능들을 소개 하려고 한다. 1. 암묵적인 타입 : var var test = 1234; // test = "Hello"; // 자바스크립트와는 달리 최초 선언된 형태의 변수로 쭉 간다. 다른 형태로 변경이 불가능하다. // 암묵적 타입을 헷깔리게 왜쓰나여? ---> LINQ에서 꼭 필요하기 때문이랍니다. Console.WriteLine("암묵적 타입 사용 : {0}", test); Javascript 의 var 와는 다르게 초기에 선언해준 인스턴스의 유형을 그대로 가져간다. 때문에 다른 타입의 인스턴스도 올 수..
[C#] 의 고급 문법 : Generic 자바에서 Generic 이라는 것을 처음 접하면서 C++에 있는 Template 라는 것과 많이 비교되며 배운 기억이 있다. Generic 이라는 것이 Template 랑 유사할 것이지 같은 의미로 사용되지 않는다는 점을 꼭 기억했으면 한다. 실제로 자바 뿐만아니라 C#에서 사용되는 Generic 이라는 문법 역시 C++의 그것과는 많이 다르게 단순하며 그만큼 또 유연하지 못하고 기능도 적은 편이라고 한다. Generic을 사용하는 것은 코드의 재사용성을 높여서 타입에 대한 안전성을 극대화시키는 장점이 있지만 반면에 코드의 크기가 커지고 가독성이 떨어지는 불리함이 있다. 코드의 크기가 커지는 것에 대해서는 문제삼기보다는 가독성에 대해서 문제 삼을 점이 많다. 가독성이 떨어진다는 것은 그만큼 소스코드를 이..
[C#] 인터페이스를 사용하는 이유가 뭘까? 인터페이스는 내가 배운 개념중에서 가장 이해가 안가고 왜 있어야되는지를 아직도 잘 모르겠는 것 중에 하나다. 사실 인터페이스에 대한 내용을 싣기에는 부족한 내공이지만 배우고 안 만큼만 블로그를 통해서 적어보려고 한다. 인터페이스라는 녀석은 아주 간단한 형태를 띠고 있다. class 라는 선언문 대신에 interface 라고 선언을 하고.. 그 안에는 접근제어자(Access Modifier : public protected private) 가 없는 메소드만이 존재할 수 있게 된다. interface INoodle { void cookPasta(); void cookRamen(); } 아주 심플한 모습인데.. 왜 이런 뼈다귀 같은 구조를 짜놓으며 왜 이런 구조의 인터페이스가 필요한 걸까? 메소드를 선언하는 ..
[C#] 왜 추상클래스를 사용하게 될까? 왜 추상클래스를 사용해야할까요? 어떤 기술의 사용이라는게 좋은 취지에서 사용이 되었더라도 다른 부분에서의 예기치 못한 불협화음을 만들어 낼 수 있다. 클래스의 상속이 그러할지도 모르겠다. 상속을 설명하며 Animal 이라는 클래스와 Cat, Dog 라는 클래스는 IS 의 관계를 만드는 관계를 맺고 있다. 그러면서 생기는 논리적인 문제는 구체적이지 않은 Animal 이라는 클래스의 인스턴스를 만들 수 있다는 점이다. Animal ani1 = new Animal(); Animal ani2 = new Dog(); Animal ani3 = new Cat(); 그럼 Animal 이라는 클래스로부터 Dog, Cat 이라는 클래스가 공유해야할 것들은 공유하되 직접적인 Animal 클래스의 인스턴스의 생성을 막으려면 ..