2013년 9월 27일 금요일

[C#4.0강좌강의]닷넷, C#에서의 클래스 기초(구현 코드 중심), 닷넷클래스, C#클래스, 닷넷교육, C#교육

[C#4.0강좌강의]닷넷, C#에서의 클래스 기초(구현 코드 중심), 닷넷클래스, C#클래스, 닷넷교육, C#교육

------------
1. 기본 형태
------------
(internal)class MyClass {
...
}
class 앞에 아무것도 쓰지 않으면 기본적으로 클래스는 internal로 정의 된다, 즉 현재 프로젝트의 코드에서만 그 클래스에 접근이 가능하다는 뜻이다. 참고로  public인 경우 다른 프로젝트에서도 접근이 가능하며 클래스인 경우 protected (같은 클래스와 상속 받은 하위 클래스에소 접근이 가능)와 private(같은 클래스 내에서만 접근 가능)은 올 수 없다.(클래스 멤버인 경우 가능)
아래처럼 클래스를 선언 시 public 이면서 abstract/sealed 인 것에 대해 동시에 정의가 가능하다.
public abstract class MyClass  또는 public sealed class MyClass
---------------
2. 상속/인터페이스
---------------
상속의 경우 :(콜론)으로 파생되었음을 표시한다. 여기서 주의 할 점은 C# 클래스는 오직 하나의 기반클래스(Base)만을 허용 한다는 것이다. 그리고 추상클래스를 상속 받은 경우에는 모든 추상멤버들을 모두 구현 해야 된다는 것이다.(파생 클래스 역시 추상 클래스인 경우는 예외임) 그리고 한가지 주의 할 점은 파생된 클래스가 기반 클래스보다 더 공개적일 수 없다는 것이다.
[다음의 경우는 유효함]
public class MyBase { .. }
internal class MyDerieved : MyBase { … }
[다음의 경우는 컴파일 되지 않는다.]
internal class MuBase { … }
public class MyDerieved : MyBase { … }
만약 기반클래스(Base Class)를 써주지 않으면 암시적으로 System.Object(C#에서의 별칭은 object)를 상속하게 된다. 궁극적으로 모든 클래스들은 System.Object에 뿌리를 두게 되는 것이다.
클래스가 지원하는 인터페이스(Interface) 역시 콜론(:) 을 통해 지정된다. 기반클래스와 인터페이스가 모두 존재하는 클래스라면 반드시 기반 클래스를 먼저 쓰고 쉼표 다음에 인터페이스 이름을 써 준다. 기반클래스는 없고 인터페이스만 있다면 콜론 바로 다음에 인터페이스 이름을 써 주면 된다.
public class MyClass : MyBase, IMyInterface {
public class MyClass: ICompare {
아래는 잘못된 경우이다.
public class MyClass: IMyInterface, MyBase {
어떤 인터페이스를 지원(구현)하는 클래스는 그 인터페이스의 모든 멤버들을 구현 해야 한다. 만일 아무 할 일도 없는 멤버라면 비어있는 것이라도 만들어야 한다.
인터페이스를 정의하는 방식은 interface라는 키워드를 사용 한다는 점을 제외하면 클래스 정의와 거의 동일하다. 즉 아래와 같은 형태이다.
Interface IMyInterface {
물론 public, internal 한정자 들은 클래스를 정의 할 때와 동일한 의미를 가진다.
또한 abstract 와 sealed는 쓰이지 않는다. 원래 인터페이스는 구현을 담지 않으므로 abstract는 의미가 없으며 , 상속되지 않으면 의미가 없으므로 sealed도 사용되지 않는다.
인터페이스는 인스턴스화 할 수 없으며 다중상속이 가능하다.(이점은 클래스와 다르다.)
public interface MyInterface: IMyBaseInterface1, IMyBaseInterface2 {
[아래의 예제를 따라 해 보자.]
1. Visual Studio .Net을 통해 새로운 콘솔 응용 프로그램을 만들자.
2. 아래와 같이 빈 클래스와 메인을 만들자.
using System;
namespace Exam1
{
 public abstract class MyBase
 {
 }
 internal class MyClass: MyBase
 {
 }
 public interface IMyBaseInterface
 {
 }
 internal interface IMyBaseInterface2
 {
 }
 internal interface IMyInterface: IMyBaseInterface, IMyBaseInterface2
 {
 }
 internal sealed class MyComplexClass: MyClass, IMyInterface
 {
 }
 /// <summary>
 /// Class1에 대한 요약 설명입니다.
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 해당 응용 프로그램의 주 진입점입니다.
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 여기에 응용 프로그램을 시작하는 코드를 추가합니다.
   //

   MyComplexClass obj = new MyComplexClass();
   Console.WriteLine(obj);
   //ToString() 메서드는 System.Object로부터 상속된 메소드들중 하나로서 개체의 클래스 이름을 하나의 string으로 돌려준다.
   Console.WriteLine(obj.ToString());
  }
 }
}

[개강안내]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)

[주말]
  [9/28]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 
  [9/28]SQL초보에서실전전문가까지 
  [9/28]C#,ASP.NET마스터
  [9/28]웹퍼블리싱 마스터 
  [10/5]Spring3.X, MyBatis, Hibernate실무과정 
  [10/5]스프링3.X게시판&오라클힌트,SQL튜닝,사례연구
[평일주간]
  [10/4]PL/SQL,오라클힌트,SQL튜닝,사례연구
  [10/8]스프링3.X게시판&오라클힌트,SQL튜닝,사례연구
  [10/8]C#4.0, ADO.NET, Network 프로그래밍 
  [10/10]Spring3.X, MyBatis, Hibernate실무과정
  [10/10]SQL초보에서실전전문가까지
  [10/10]C#,ASP.NET마스터 
[평일야간]
  [10/4]SQL초보에서실전전문가까지
  [10/4]자바초보에서안드로이드까지
  [10/4]C#,ASP.NET마스터
  [10/8]스프링3.X게시판&오라클힌트,SQL튜닝,사례연구
  [10/10]JAVA&WEB프레임워크실무과정
  [10/16]Spring3.X, MyBatis, Hibernate실무과정

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터
(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  

댓글 없음:

댓글 쓰기