글 작성자: 써니루루

 

혹시 못오신 분이나 정리 못 하신분 또는 스터디를 듣지 않는 분을 위해 간단히 정리해 봤어요~

 

참고용으로 한번 보세요~~

 

 

(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 구현은 여러가지를 받아 구현 있다. : 기능적으로 추가되는 수평적인 상속

 

 

 

 

 

세미나 내용

 

  1. Interface, Abstract Class, Class

 

  1. Interface
    1. 인터페이스의 상속 = implement (구현) , 추가되는 기능들을 넣는 형식
    2. 인터페이스의 상속을 받으면 '무조건' 안의 것들을 모두 구현해야 한다.
    3. 이기종간의 통신에 객체를 형태를 알리기 위해

 

  1. Abstract Class
    1. 추상클래스의 상속 = extends (확장) , 설계된 틀을 구현 / 확장 하는 형식

 

  1. Class
    1. 구현된 설계도

 

 

  1. OOP(Object Oriented Programming)

 

  1. 상속(Inheritance)
    1. sealed 키워드 : 성능상 장점이 있다
      1. ? : 이상 상속 받지 않는다는 것을 알려주기 때문에
      2. Class 선언시 앞에 sealed 라는 키워드를 붙여주면 된다.
      3. Ex) sealed class Bar : Foo , Idisposable { }

 

  1. 추상화(Abstraction)

 

  1. 다형성(Polymorphism)
    1. Overide
      1. 상속 받은 메소드를 (virtual 등으로 선언된) 받아 재정의 사용한다.
        1. virtual - override 둘은 같이 다닌다
      1. new 키워드를 붙여 메소드를 정의하는 것과 비교된다
      2. 다음 예제를 보자

 

// 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가 실행되었다

 */

}

}

 

  1. Overload : 같은 이름의 메소드로 다양한 형식의 인자를 받도록 한다
    1. void Abc(string a)
    2. void Abc(int a)
    3. void Abc(bool a)
    4. ...

 

  1. 정보은닉(Encapsulation)

 

  1. Property
    1. Get , Set : 또는 한가지만 노출 있다.
    2. Get set 이용해 접근을 제어한다
    3. 내부에 선언된 내부의 멤버변수에 직접 접근을 막을 있다.

 

 

  1. Dispose Pattern

 

  1. IDisposable 이라는 인터페이스를 사용한다.

 

  1. 인터페이스는 Dispose() 메소드를 재정의(Override) 해야 한다.

 

  1. 구현의

class DbManager : IDisposable

{

~DbManager() // Finalize

{

this.Dispose();

}

 

#region IDisposable 의 인터페이스를 구현한 부분

override void Dispose() // Dispose

{

// 어쩌고 저쩌고

}

#endregion

}

 

  1. Finalize
    1. 객체가 정말 소멸될 호출되므로 Dispose와는 다르다.
    2. 클래스의 명칭과 동일한 메소드
    3. 반환 타입 / 접근 제어자를 사용할 없다.
    4. 앞부분에 ~ 붙여 구분 지어주면 객체가 소멸될 자동으로 호출된다

~DbManager() // Finalize

{

this.Dispose();

}

 

 

  1. Dispose 같이 사용하는 C# 구문 "using"
    1. C# 맨위에 쓰는 using 다르다
    2. 아래는 using 사용 구문

using(DbManager dbm = new DbManager)

{

// 이런저런 코드

// 안에서는 using 안에서 선언한 것이 살아 있다.

} // 여기서 dbm 소멸된다 Finalize

// 에러가 발생한다 dbm = null 이기 때문에 NullReferenceException이 발생한다

dbm.어떤메소드();

  1. 기타 : Managed 코드를 Dispose할때 GC.SuppressFinalize(this); 호출 한다.

 

  1. 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 두 곳에서만 볼 수 있습니다. 컨텐츠 변경 / 상업적 이용을 허용하지 않습니다. 링크만 참조해주세요~