목록C#/C# 객체지향 (9)
아디봉의.net
c#에서는 서로 성질이 다른 데이터 타입인 값타입과 참조타입을 두고 있다. 그리고 값타입과 참조타입이 서로 공존하기때문에 문제가 발생한다. 예를 들어 함수의 매개변수를 Object 형으로 했다면 참조타입으로 지정한것이다. Object 형은 모든 클래스의 최상위의 형이기 때문에 업캐스팅의 원리에 의해서 모든 객체는 Object형으로 형변환될 수 있다. public class Top{ public static void say(Object obj){ //... } } Top.Say(new Object()); Top.Say("Hello"); Top.Say(3); Boxing : 값타입을 참조타입으로 변환하는 기법 UnBoxing : 참조타입을 값타입으로 변환하는 기법 Boxing Boxing 을 하는 기본적인 ..
다형성(Polymorphism) - 하나로 여러가지 일을 하는것 다형성 적용되는 곳 - 업캐스팅(Upcasting) - 오버라이딩(Overriding) - 가상함수(Virtual Function) - 상속(Inheritance) - 추상클래스 - 인터페이스 다형성을 지원하기 위한 도구들 - 박싱, 언박싱, 추상클래스, 인터페이스, 델리게이트, 업캐스팅과 다운캐스팅, 가상함수 1) 추상함수 (Abstract Method) 추상함수는 구현이 이루어지지 않고 단지 그 프로토타입(Prototype)만을 가지고 있는 함수를 말함 추상함수의 특징1 - 추상함수는 abstract 키워드를 붙여서 추상함수라는 것을 명시해야한다. - 추상함수를 하나라도 포함하고 있으면 클래스명 앞에 abstract 키워드를 붙여서 추상..
this() - 자신의 생성자를 호출할 때도 사용 - 자신의 생성자를 재사용하기 위해서 생성자를 호출하는 방법을 제공 public class ThisSelf{ pricate string name; private int age; public ThisSelf() : this("이름없음"){ Console.WriteLine("매개변수가 없는 생성자"); } public ThisSelf(string name) : this(name, -1){ Console.WriteLine("매개변수가 1개있는 생성자"); } public ThisSelf(string name, int age) : { Console.WriteLine("name : " + name , "age : " + age); Console.WriteLine(..
생성자는 객체의 메모리가 생성된 직후에 호출되는 함수를 말한다. 객체를 생성할 때 생성자를 호출하지 않는 경우는 없다. 그렇기 떄문에 모든 클래스는 반드시 하나이상의 생성자를 두어야 한다. 디폴트 생성자 Default Constructor 우리가 생성자를 만들지 않은경우도 있다. 이럴경우를 대비해서 컴파일러는 컴파일할때 생성자가 있는지 검사하게되고, 생성자가 없을 경우에만 매개변수가 없으면 구현부가 비어있는 생성자를 자동으로 만들어준다. using System; public class MainTest{ public void SayHello(){ Console.WriteLine("Hello World!"); } public static void Main(){ MainTest m = new MainTest(..
상속(Inheritance) - 상속이란 만들어준 클래스를 다시 사용 할 수 있는 방법을 말한다. 상속의 쓰임 1) Top형의 클래스가 있으며, 새로 클래스를 만들어야 하는 Top 형에서 조금만 수정하면 되는 경우 2) Top형 클래스의 소스코드는 잃어 버렸으며 DLL만 있는 경우 두경우의 해결책 - 상속을 이용하면 한번에 해결가능 dll생성 namespace org.test{ pulbic class Top{ pulbic void SayHello(){ System.Console.WriteLine(안녕이라고 말하지마!!); } } } ------------------------------------------------------------ using org.test; //dll 사용하게 public cl..
오버로딩(overloading)이란? 함수의이름은 하나만 주고 매개변수를 다르게 함으로써 함수를 여러개 만드는 것을 말함, 보통 다중정의, 중복함수라고 부르며 일반적으로 오버로딩이라고 한다. 생성규칙 - 반드시 매개변수의 개수와 매개변수의 형이 달라야 한다. ex) public int plus(int a, int b){,,,} public float plus(float a, float b){,,,} public double plus(double a, double b){,,,} 매개변수의 형과 개수는 컴파일러가 함수의 이름을 다르게 부여하기 위한 함수의 구분자가 되는 것이다. 오버로딩(overloading)을 사용하는 이유 - 해당 클래스의 함수를 사용할 떄 사용자의 편리를 위해서 - 함수의 이름 하나로 ..
객체지향의 중심은 객체에 있다. 객체지향에서는 모든 것이 객체와 객체사이의 연관으로 이루어진다. 객체란? 우리가 표현할수 있는 실세계의 모든 사물들을 객체(또는 오브젝트)라고 한다. 명사의 성질을 가진 모든 사물들이 객체로 구분지을수 있겠다.
이벤트 코드 생성기 1.4 버전에 추가된 히스토리 기능은 이전에 생성한 이벤트 이름과 매개변수 쌍을 기억하는 기능입니다. 이 기능을 어떤 식으로 구현하는 것이 좋을까요? 아마도 클래스가 있는 언어를 사용한다면 히스토리를 관리하는 클래스를 만들어 관련된 모든 로직을 캡슐화하는 것이 정석일 것입니다. 구체적으로 이 클래스가 할 일을 정리해 본다면, 히스토리를 추가한다. 다만 추가할 수 있는 갯수에는 제한이 있어 최대값에 도달하면 선입선출 식으로 제거된다. 추가된 히스토리를 삭제할 필요는 없다. 히스토리 목록을 저장소(여기에서는 파일 시스템)에 저장하고 저장소에서 불러온다. 윈폼의 BindingSource 객체의 DataSource로 지정될 수 있다. (즉 히스토리 목록을 열거할 수 있다.) 프로그램 전반에 ..
오늘은 OOP의 이론 중의 하나인 분할 정복에 대해서 (예제를 만들어 보며) 이야기 해보겠습니다. 아시다시피 ‘분할 정복’이란 커다란(복잡한) 문제를 작은(단순한) 문제들로 나눈 후, 나뉜 작은 문제들의 해를 구한 다음에, 이를 다시 결합하여 원래 문제의 해를 구하는 방법을 말합니다. 이는 OOP에서 말하는 캡슐화의 기반이 됩니다. 즉 수 많은 작업(메서드)이 있더라도 이를 몇 개의 클래스로 묶어 클래스 내부에서 처리하도록 하면(단순해진 작은 문제의 해를 구함), 외부에서는 각 클래스가 하는 일에 대해 구체적으로 알 필요가 없이 클래스 간의 통신만 관리하는(작은 문제들의 해를 결합) 식으로 문제를 단순화시킬 수 있다는 것입니다. 여기서 중요한 것은 클래스 간의 ‘통신’(OOP 용어로는 메시지 전달) 입니..