[Hoons C# 스터디 2009 1기] 3주차 세미나 / 발표 내용 정리
혹시 못오신 분이나 정리 못 하신분 또는 스터디를 듣지 않는 분을 위해 간단히 정리해 봤어요~
참고용으로 한번 보세요~~
(Office 2007 One Note에 있던 내용을 그대로 복사해서 넣어서 조금 깨질지 몰라요~)
발표 내용
발표 내용
Class? Object?
- 속성, 역할을 정의한 틀
- 객체와 클래스의 관계
- 객체 : 어떠한 문제
- 클래스 : 이들에 맞는 상황을 설명하는 것
- Class = 붕어빵 틀 , Object = 찍어낸 붕어빵
- Abstract Class ( 추상 클래스 )
- 어떤 클래스를 만들어 내기 위해서 기본적인 기능을 포함하는 클래스
- 객체로 만들 수 없는 클래스
- 이를 상속받는 클래스가 이러한 기본기능이 있어야 한다는 것을 지정한다.
- 추상 클래스의 예
- 붕어빵 틀과 와플빵 틀의 기본인 '무언가 만드는 틀' 이라는 추상 클래스
- Interface? (인터페이스)
- 객체 자체 or 객체와 객체를 엮어주기 위한 기능, 속성들의 약속(표준)
- 마우스 클래스 : IBluetooth, IUSB, IPS2 어떤 인터페이스를 받아 마우스를 구현할 것인가?
- IDisposable 인터페이스의 예
- IDisposable 인터페이스는 Dispose() 라는 메소드를 구현해 주어야 한다.
- 객체의 메모리를 해제할 수 있도록 구현하고 싶을 때 이 인터페이스를 상속 받는다.
- Interface vs Abstract Class
- 추상클래스(or class)는 단일 상속만 가능하다 : 상하 단계의 상속
- Interface의 구현은 여러가지를 받아 구현할 수 있다. : 기능적으로 추가되는 수평적인 상속
세미나 내용
- Interface, Abstract Class, Class
- Interface
- 인터페이스의 상속 = implement (구현) , 추가되는 기능들을 넣는 형식
- 인터페이스의 상속을 받으면 '무조건' 그 안의 것들을 모두 구현해야 한다.
- 이기종간의 통신에 객체를 형태를 알리기 위해
- Abstract Class
- 추상클래스의 상속 = extends (확장) , 설계된 틀을 구현 / 확장 하는 형식
- Class
- 구현된 설계도
- OOP(Object Oriented Programming)
- 상속(Inheritance)
- sealed 키워드 : 성능상 장점이 있다
- 왜? : 더 이상 상속 받지 않는다는 것을 알려주기 때문에
- Class 선언시 앞에 sealed 라는 키워드를 붙여주면 된다.
- Ex) sealed class Bar : Foo , Idisposable { }
- 추상화(Abstraction)
- 다형성(Polymorphism)
- Overide
- 상속 받은 메소드를 (virtual 등으로 선언된) 받아 재정의 할 때 사용한다.
- virtual - override 둘은 같이 다닌다
- new 키워드를 붙여 메소드를 정의하는 것과 비교된다
- 다음 예제를 보자
// virtual - override를 사용할 때
class Foo
{
public virtual void M()
{
Console.Write("Foo.M()");
}
}
class Bar : Foo
{
public override void M()
{
Console.Write("Bar.M()");
}
}
// New 키워드를 사용할 때
class Foo
{
public void M()
{
Console.Write("Foo.M()");
}
}
sealed class Bar : Foo
{
public new void M()
{
Console.Write("Bar.M()");
}
}
class Program
{
static void Main(string[] args)
{
Foo foo = new Foo();
Bar bar = new Bar();
foo.M();
MM(foo);
bar.M();
MM(bar);
MM((Foo)bar); // virtual과 new의 차이
/*
* virtual - override 를 사용한 경우
* (재정의 되어 자식 클래스에 M()은 완전한 재정의가 되었다)
* Foo.M()
* Foo.M()
* Bar.M()
* Bar.M()
* Bar.M() // 재정의 되어 Bar가 나왔다
*
* new를 사용한 경우
* (재정의가 아니고 Bar에서만 쓸 M을 선언한 것이 된다.)
* Foo.M()
* Foo.M()
* Bar.M()
* Foo.M() // Foo의 특성이 그대로 나타난다
* Foo.M() // 재정의가 덮어 씌워지지 않고 Foo가 실행되었다
*/
}
}
- Overload : 같은 이름의 메소드로 다양한 형식의 인자를 받도록 한다
- void Abc(string a)
- void Abc(int a)
- void Abc(bool a)
- ...
- 정보은닉(Encapsulation)
- Property
- Get , Set : 둘 다 또는 둘 중 한가지만 노출 할 수 있다.
- Get set을 이용해 접근을 제어한다
- 내부에 선언된 내부의 멤버변수에 직접 접근을 막을 수 있다.
- Dispose Pattern
- IDisposable 이라는 인터페이스를 사용한다.
- 이 인터페이스는 Dispose() 메소드를 재정의(Override) 해야 한다.
- 구현의 예
class DbManager : IDisposable
{
~DbManager() // Finalize
{
this.Dispose();
}
#region IDisposable 의 인터페이스를 구현한 부분
override void Dispose() // Dispose
{
// 어쩌고 저쩌고
}
#endregion
}
- Finalize
- 객체가 정말 소멸될 때 호출되므로 Dispose와는 다르다.
- 클래스의 명칭과 동일한 메소드
- 반환 타입 / 접근 제어자를 사용할 수 없다.
- 앞부분에 ~ 를 붙여 구분 지어주면 객체가 소멸될 때 자동으로 호출된다
~DbManager() // Finalize
{
this.Dispose();
}
- Dispose와 같이 사용하는 C# 구문 "using"
- C# 맨위에 쓰는 using과 다르다
- 아래는 using의 사용 구문
using(DbManager dbm = new DbManager)
{
// 이런저런 코드
// 이 안에서는 using 안에서 선언한 것이 살아 있다.
} // 여기서 dbm은 소멸된다 Finalize
// 에러가 발생한다 dbm = null 이기 때문에 NullReferenceException이 발생한다
dbm.어떤메소드();
- 기타 팁 : Managed 코드를 Dispose할때 GC.SuppressFinalize(this); 를 호출 한다.
- SqlHelper 의 예
public sealed class SqlHelper // sealed 를 이용해서 더 이상 상속받지 못하도록 한다.
{
// 생성자의 오버로드
// 기본적으로 지정된 위치의 연결 문자열을 가져옴
public SqlHelper() : this(ConfigurationManager.ConnectionStrings["connstr"].ToString());
public SqlHelper(string connStr) { … };
// 실행할 쿼리 메소드의 오버로드
public bool ExecuteNonQuery(string query)
{
List<string> queries = new List<string>(1);
queries.Add(query);
this.ExecuteNonQuery(queries);
}
public bool ExecuteNonQuery(List<string> queries) { … };
}
참고하세요 ^ ^
PS . 이 글은 Hoons.kr / i-ruru.com 두 곳에서만 볼 수 있습니다. 컨텐츠 변경 / 상업적 이용을 허용하지 않습니다. 링크만 참조해주세요~
댓글
이 글 공유하기
다른 글
-
정규표현식(Regular Expression) Href URL 캡쳐(Capture)
정규표현식(Regular Expression) Href URL 캡쳐(Capture)
2009.03.02 -
여러줄을 한번에 StringBuilder로 감싸는 방법~! - Editplus 정규표현식, 바꾸기 기능
여러줄을 한번에 StringBuilder로 감싸는 방법~! - Editplus 정규표현식, 바꾸기 기능
2009.02.26 -
Use WebBrowser and shdocvw.dll for POST Data sending
Use WebBrowser and shdocvw.dll for POST Data sending
2009.02.16 -
Visual Studio에서 " " 따옴표로 묶은 문자열만 잡기
Visual Studio에서 " " 따옴표로 묶은 문자열만 잡기
2009.02.13