본문 바로가기

C# 공부

(22)
프로퍼티 - 2 (인터페이스의 프로퍼티, 추상 프로퍼티) A. 인터페이스의 프로퍼티 인터페이스는 메소드 뿐만아니라 프로퍼티와 인덱서도 가질수 있다. 마찬가지로 파생클래스에서는 필수적으로 구현이 되어야한다. 인터페이스의 프로퍼티 선언은 클래스의 자동구현 프로퍼티 선언과 모습이 동일하다는 점만 주의해서 사용. interface INamedValue { string Name{get;set;} string Value{get;set;} } class NamedValue : INamedValue //인터페이스를 상속하므로 반드시 Name과 Value를 구현해야하며, 자동구현프로퍼티를 사용해도된다. { public string Name{get;set;} public string Value{get;set;} } B. 추상클래스와 프로퍼티 추상클래스는 구현된 프로퍼티와 추상프..
프로퍼티 - 1 (구현과 사용법, 자동구현 프로퍼티, 프로퍼티와 생성자, 무명형식) A. 프로퍼티의 구현과 사용법 자바에서는 private 필드를 접근할수있도록 하기위해 아래와 같이 GetXXX(), SetXXX() 메소드를 구현해서 사용했었다. class MyClass { private int myField; public int GetMyField(){return myField;} public void SetMyField(int NewValue){myField=NewValue;} } 하지만, C#에서는 접근자(accessor)라는 더 나은 구현법 ( get{}, set{} ) 을 제공한다. class MyClass { private int myField; public int MyField //접근한정자 데이터형식 프로퍼티명 { get { return myField; } set { my..
추상 클래스 (클래스와 인터페이스의 사이) abstract 키워드로 선언되며, 추상 클래스는 인터페이스와는 달리 "구현" 을 가질 수 있다. 하지만, 클래스와는 달리 인스턴스는 만들 수 없다.(인터페이스와 동일) 즉, 인터페이스와 클래스의 사이. 구현된 메소드를 가질 수 있지만, 추상 메소드(Abstract Method)도 가질수있어서 인터페이스의 역할도 할 수 있게 한다. +) 추상메소드는 구현시 override 키워드를 사용한다. 추상 클래스의 모든 메소드는 한정자를 명시하지 않을시 private 이며, C#컴파일러가 public, protected, internal, protected internal 중 하나로 수식될것을 강요한다. * 추상클래스를 사용하는 이유 추상 클래스를 사용하는 프로그래머가 그 기능을 정의하도록 강제하는 기능을한다. ..
인터페이스 (선언과 사용법, 상속, 다중상속) A. 인터페이스(interface)의 선언과 사용법 선언시 메소드 구현부가 없으며, 접근제한 한정자를 사용할 수 없고, 모든것이 public으로 선언된다. 또한, 인터페이스는 인스턴스도 만들 수 없다. 하지만, 상속받는 클래스의 인스턴스를 만드는것은 가능하며, 이때 조건으로는 인터페이스에 선언되어있는 모든 메소드( 및 프로퍼티)를 구현해줘야하며, 이 메소드들은 public 한정자로 수식해야한다. * 인터페이스 작명법은 인터페이스의 이름앞에 'I'를 붙이는것이 관례 interface ILogger //ConsoleLogger, FileLogger클래스는 ILogger를 상속하며, WriteLog() 메소드를 구현 { void WriteLog(string log); } class ConsoleLogger :..
클래스 - 4 (중첩클래스, 분할클래스, 확장메소드, 구조체, 튜플) A. 중첩클래스 (Nested Class) 중첩 클래스는 클래스내에 선언된 클래스이다. Class OuterClass { Class NestedClass { } } - 특징 : 자신이 소속된 클래스의 private멤버에도 자유롭게 접근할수있다. - 장점, 사용하는 상황? 1. 클래스 외부에 공개하고 싶지 않은 형식을 만들고자 할 때 2. 현재 클래스의 일부분처럼 표현할 수 있는 클래스를 만들고자 할때 class Configuration { List listConfig = new List(); public void SetConfig(string item,string value) { ItemValue iv = new ItemValue(); iv.SetValue(this, item, value); } publ..
클래스 - 3 (다형성, 오버라이딩, 메소드 숨기기, 오버라이딩 봉인) A. 오버라이딩과 다형성 다형성(Polymorphism) : 객체가 여러 형태를 가질 수 있음을 의미한다. 오버라이딩(Overriding) : 메소드 재정의 다형성은 원래 하위 형식 다형성(Subtype Polymorphism)의 준말이다. 다시말해 자신으로부터 상속받아 만들어진 파생클래스를 통해 다형성을 실현한다. 이때, 오버라이딩은 virtual 키워드를 통해 부모클래스에서 정의되고, 자식클래스에서 override 키워드를 통해 재정의한다. class ArmorSuite { public virtual void Initialize() { Console.WriteLine("Armored"); } } class IronMan : Armorsuite { public override void Initializ..
클래스 - 2 (this(), 접근한정자, 상속, base키워드, is/as, 기반/파생 클래스간 형변환) A. this( ) 생성자 class MyClass { int a,b,c; public MyClass() { this.a = 5425; } public MyClass(int b) { this.a = 5425; this.b = b; } public MyClass(int b, int c) { this.a = 5425; this.b = b; this.c = c; } } 위 코드는 문제는 없지만 세 개의 MyClass( ) 생성자 안에 똑같은 코드가 중복되어 들어가있다. 이 문제를 this( ) 생성자를 이용해 해결가능하며 생성자에서 자기자신의 생성자를 가리킨다. * this( ) 생성자를 사용할때는 생성자의 코드블록이 아닌 앞쪽에서만 사용이 가능하다. //this() 생성자를 적용시킨 코드 class MyCl..
클래스 - 1 (Static, 얕은/깊은 복사) A. Static (정적) 필드, Static (정적) 메소드 프로그램 전체에 걸쳐 공유해야 하는 변수, 메소드가 있다면 정적 필드, 정적 메소드를 사용하면된다. class Global { public static int Count = 0; } class ClassA { public ClassA() { Global.Count++; } } class ClassB { public ClassB() { Global.Count++; } } B. 객체 복사하기 1. 얕은 복사 (Shallow Copy) MyClass source = new MyClass(); source.MyField1 = 10; source.MyField2 = 20; MyClass target = source; target.MyField2 = 3..