본문 바로가기

C#(ASP.NET)

(28)
Boxing And Unboxing ■ 기본 개념 - Boxing : Value Type(Int, float, struct 등)을 Reference Type(Object) 으로 Cast 하는 것 - Unboxing : Reference Type을 Value Type으로 Cast 하는 것 ■ 동작원리 기본적으로 Value Type의 경우 stack에 할당되고 Reference Type의 경우 heap 상에 할당이 되는데 Value Type(Primitive Value Type 포함) Define시 동일한 field를 가지는 Hidden Class(Boxed Class) 가 heap 상에 생성이 된다. Boxing 작업이 필요할 경우 해당 Hidden Class의 instance가 instantiated 및 initialized 되면서 val..
C#_메소드 오버라이딩(virtual) Virtual키워드와 abstract 키워드의 차이는 abstract 메소드가 구현을 가지지 않고, abstract 클래스 안에 선언되어야 하는 것에 반해, Virtual 메소드는 구현을 가지고 일반 클래스에 선언될 수 있다는 것이다. 사실 Virtual 메소드는 Virtual 제한자가 붙는다는 것 외에는 다른 메소드와 동일하다. Virtual 메서드는 오버라이드 할 때 abstract 메소드와 마찬가지로 override 키워드를 사용한다. ex) /* 2/24 객체지향적 프로그래밍(상속: Virtual(제한자))*/ using System; class Com { public void Gr() { Console.WriteLine("그래픽 OK"); } public virtual void Ne() { Co..
C#_메소드 오버라이딩(abstract) Abstract 제한자는 클래스, 메소드 및 프로퍼티에 대해 사용할 수 있다. 메소드가 abstract로 선언되었다면 해당 클래스에서는 이 메소드를 구현하지 않고 해당 클래스의 파생 클래스가 이 메소드를 구현해야 한다. abstract 메소드는 머리만 있고 몸통이 없는 메소드 이기 때문에 해당 클래스에서는 사용할 수 없다. 클래스 선언에 abstract 제한자를 사용하면 해당 클래스가 다른 클래스의 기본 클래스만 사용됨을 나타낸다. abstract 메소드는 abstract 클래스 안에서만 선언할 수 있고 abstract 클래스는 자기 스스로 객체를 생성하지 못한다. 자신에게서 상속을 받은 클래스만이 객체를 생성할 수 있다. 또한 abstract 메소드는 상속 받은 클래스에서 반드시 구현해야 한다. abs..
C#_메소드 오버라이딩(정의, new) 오버라이딩(Overriding)은 무시하다. 짓밟다의 뜻이 있다. 메소드 오버라이딩은 기존의 메소드를 완전히 무시하고 새로운 기능을 입히는 것을 말한다. New 키워드를 사용하면 과거를 숨기고 새로운 모습으로 다시 태어날 수 있다. Override가 new와 다른 것은 메소드와 프로퍼티만 재정의 할 수 있고, 사용하기 위해서는 몇 가지 제약이 있다는 것이다. Override는 abstract, virtual, override 속성을 가진 메소드만 재정의 할 수 있다. 애초에 override 되기 위한 준비를 하고 있는 메소드만 override할 수 있다는 것이다. 접근제어자 new 반환형 메소드이름([인자]) 여기서 new는 "이 메소드를 새로 쓰겠다." 라고 C# 컴파일러에게 일러주고 있다. new 제..
interface 1.자신에게서 상속 받을 클래스가 구현해야 할 기능을 나열해 놓은 것이다. 2.자신은 직접 기능에 대한 구현을 가지지 않고 자신의 파생 클래스가 그 메소드를 구현 하도록 하는 것이다. 3. 인터페이스의 상속은 클래스의 상속과 같다. 4. 오버라이드 할 때 new 나 override 키워드를 사용하지 않고 선언되었던 속성 그대로 다시 class에서 선언하여 구현하면 된다. 5. 다중상속이 가능 6. abstract 클래스에서 abstract 메소드만 모아 놓은 것이라 생각하면 된다. ex) Interface Imammal { void walk(); } Class cat : Imammal //a,b,c 다중 { public void walk() { Console.Write("hello"); } } -----..
struct(구조체) 1.상속을 받지도 상속을 하지도 않는다. 2.클래스는 항상 new 연산자를 사용해 객체를 생성했다. 구조체 new를 사용하지 않아도 된다. 하지만 이렇게 하면 객체는 메모리에 할당되지 않은 상태로 남기 때문에 모든 멤버(필드)를 초기화 해줘야 한다. 생성자를 선언할 때 매개변수 없이 하면 오류가 발생한다. 기본 생성자는 반드시 구조체의 모든 멤버를 초기화 해야한다. 3.struct의 접근 제한자의 디폴트는 private이다. ex) Struct point { public int x; public int y; } -------------------------------------------- /* 2/27 구조체(struct)*/ using System; public struct Point { public..
C# Interface 활용의 단편적인 예 C# 에는 인터페이스라는 개념이 있습니다. (Java에도 있지만...) MSDN에 명시되 있는 인터페이스 개요를 살펴 보면 다음과 같습니다. 하지만 평소에 공부 제대로 안한 저는 "인터페이스는 개발자간 표준 규악을 지키기 위해 존재하는 ..." 정도로만 알고 있습니다. 즉, 여러 명의 개발자가 어떤 클래스를 구현할 때 그 클래스들의 공통 성격(?) 정도를 인터페이스로 만들어서 지킬 건 반드시 지키게 만들어 주는 것... 이 정도 였습니다. 그런데 이것도 문제가 있는게 해당 개발자가 그 인터페이스를 상속 받지 않고 개발해 버리면 이것도 소용이 없습니다. 담당 팀장이나 책임자가 "너 왜 그 인터페이스 상속 안 받고 개발했어?" 라고 확인해 주지 않는 한 그냥 넘어가게 되는 거죠. 지금까지 제가 말씀 드린 건..
delegate(대리자) using System; // Declare delegate -- defines required signature: delegate void SampleDelegate(string message); class MainClass { // Regular method that matches signature: static void SampleDelegateMethod(string message) { Console.WriteLine(message); } static void Main() { // Instantiate delegate with named method: SampleDelegate d1 = SampleDelegateMethod; // Instantiate delegate with anonymous m..
delegate(대리자) 델리게이트(Delegate)는 C의 함수 포인터와 비슷한 역할을 한다. 즉, 자기 자신이 실제로 하는 일은 없고, 단지 자기가 가리키고 있는 메서드(함수)를 호출하는 역할을 하는 것이다. 결국 델리게이트(Delegate)는 함수에 대한 참조를 저장 하는 것인데 이렇게 함수에 대한 참조를 가리키고 있다는 것으로 인해 불가능한 작업등이 가능해진다. 예를 들면 Delegete를 다른 함수의 인자로 넘겨주게 되면 그 함수는 델리게이트가 보내 주는 함수의 참조를 이용하여 실행 시점에 호출될 함수를 결정 할 수 있는 것이다. 대리자의 선언은 일반 함수의 선언과 비슷하나 함수 본문이 없고 delegate 라는 키워드를 사용한다는 점이 다르다. 델리게이트는 쓰레드와 이벤트에서 주로 이용 할 수 있다는 것은 참고로 알아..
ASP.NET 2.0의 페이지 생존 주기와 각 이벤트들 설명 ASP.NET 2.0에는 기존 버젼 보다 더 많은 숫자의 이벤트와 각 이벤트를 처리하는 메소드들이 추가되었다. 아래의 내용들을 살펴보면 기존 버젼에는 없던 이벤트들을 볼 수 있다. 실제 이런 실행 이벤트를 보려면 페이지에 Trace="true"를 추가해서 트레이싱을 해 보면 도움이 된다. 서버는 요청될 때마다 매번 ASP.NET 페이지를 로드한 다음, 요청이 완료되면 해당 ASP.NET 페이지를 언로드한다. 일련의 실행 주기를 가지는 Page 및 서버 컨트롤은 요청을 실행하고 HTML을 클라이언트로 다시 렌더링 한다. 이러한 컨트롤을 다루는 프로그래머는 컨트롤 실행 주기의 각 단계에서 어떤 정보를 사용할 수 있고, 어떤 데이터가 유지되는지와 렌더링 시 컨트롤의 상태를 이해하고 있어야 한다. ASP.NET..