본문 바로가기

모든 글 보기963

[C# Basic강좌] 제1장 C#의 배경 2009. 8. 26.
한이음 EXPO & Festival 2008 참가 3D 고스톱 게임으로 COEX에서 열린 소프트웨어 작품전시회에 참가했었다. 우리 학교에서는 3개의 팀이 참가 역시 고스톱은 남녀노소 다 좋아함..ㅎㅎ 세팅중에 잠시.. 레이싱 모델분들이 안나오셨다는게 너무 아쉬움... 홍보용 전단지..ㅎㅎ 2009. 8. 26.
ref 와 out 함수를 호출하는 방법에는 크게 Call by Value 와 Call by Reference 가 있는건 알고 있을테고, C에서는 포인터를 통해 Call by Reference를 하지만 c#에서는 포인터를 사용하지 않고, 크게 두가지가 있다. ref 와 out 둘다 주소값을 보내는 것이지만, ref 는 매개변수로 사용전에 초기화 되어야만 하고, out 은 초기화 되지 않아도 된다.(함수안에서 초기화) 그러므로 out는 함수안에서 어떤 값을 얻어올때 주로 사용한다. ref => call by Refecnce out => call by Result 2009. 8. 24.
[effective C#]ITEM#26 IComparable 과 IComparer를 이용하여 순차관계를 구현하라. IComparable - 객체간의 기본적은 순차관계를 정의할 목적으로 사용된다. - CompareTo()라는 하나의 메서드만을 정의하고 있다. - CompareTo()메서드를 overload해서, 성능의 문제를 개선할 수 있다. - CompareTo()와 일관성을 유지하기 위해서 비교연산자도 동시에 overload하는 것이 좋다. IComparer - 관계연산(,=)의 의미를 별도로 정의 - 기존의 관계연산이 타입별로 다른 의미를 가질 수 이도록 한다. - interface구현에 따를 런타임시 수행성능의 비효율성을 극복하기 위해서 사용 [출처] ■ITEM#26 IComparable 과 IComparer를 이용하여 순차관계를 구현하라.|작성자 롱박 2009. 8. 24.
[effective C#]ITEM25# serializable 타입이 더 좋다. ITEM25# serializable 타입이 더 좋다. 우리가 만드는 타입 중에 UI전용컨트롤,윈도우 혹은 폼을 가지는 타입을 제외한 모든 타입은 반드시 serialzation기능을 제공해야 한다. [Serializable] public class MyType { private string _label; private int _value; } MyType의 멤버인 string,int 타입은 기본적으로 serialization을 지원하는 타입이기 때문에 Serialization attribute를 추가하는 것만으로 MyType은 serialzation이 가능한 타입이 된다. -닷넷 Serialization은 객체 내의 모든 멤버변수를 출력 스트립으로 내보낼 수 있다. -닷넷 프레임워크는 Serializat.. 2009. 8. 24.
[effective C#] item #14: 연쇄적인 생성자를 호출하라. ITEM #14: 연쇄적인 생성자 호출을 이용하라. 어떤 클래스에서 다수의 생성자 내에서 중복적으로 수행되고 있는 코드가 있으면,중복코드들을 새로운 생성자로 분리시켜 호출하는 방식으로 초기화를 수행하도록 하자. C#에서 대부분의 클래스들은 하나 이상의 생성자를 가지고 있고,이 생성자들의 역할이 객체의 멤버들을 초기화하는 것이기 때문에 생성자의 연쇄 호출방식을 이용하여 객체 멤버들을 초기화하는 것은 매우 자연스럽다. 인스턴스 과정에서 내부적으로 수행되는 순서 1. static 변수를 0으로 설정한다. 2. static 변수에 대해 선언시 초기화 루틴을 수행한다. 3. 기반 클래스의 static 생성자를 수행한다. 4. static 생성자를 호출한다. 5. 인스턴스 변수를 0으로 설정한다. 6. 인스턴스 변.. 2009. 8. 24.
[effective C#] item #9: ReferenceEquals(),static() Equals(),instance Equals(),operator==의 상호 연관성을 이해하라. ■ITEM#9 ReferenceEquals(),static() Equals(),instance Equals(),operator==의 상호 연관성을 이해하라. 새로운 타입을 만드는 경우 동일성의 의미를 정확히 규정하는 것은 매우 중요하다. C#에서 동일함을 비교하는 메서드 public static bool ReferenceEquals(object left, object right) ←재작성X public static bool Equals(object left, object right) ←재작성X public virtual bool Equals(object right) ←재작성O public static bool operator==(Myclass left, Myclass right) ←재작성O 하지만,2개의.. 2009. 8. 24.
[effective C#] item #4 : #if 대신 Confitional Attribute를 사용하라. ■item#4 #if 대신 Confitional Attribute를 사용하라. Confitional Attribute의 제한사항 - 메서드에 대해서만 지정이 가능하다. - Conditional Attribute를 지정하는 메서드는 반드시 void형태의 리턴 타입을 가져야 한다. - 메서드 내의 일부 문장에 대해서만 Conditional Attribute를 지정해야 한다며 ,해당 문장을 독립된 메서드로 분리하는 것이 좋다. Conditional Attribute는 - #if/#endif를 사용하는 것보다 좀 더 효율적인 IL코드를 생성한다. - 메서드 단위로만 Attribute를 지정할 수 있기 때문에, 조건적으로 생성되는 코드들을 일반 코드들과 격리시키고, 보다 구조적으로 프로그램을 만들 수 있도록 한다.. 2009. 8. 24.
[effective C#] item #3 : cast보다는 is나 as가 좋다. ■item#3 cast보다는 is나 as가 좋다. C#언어에서는 많은 경우에 System.Object타입의 인자를 받아들이는 메서드를 만들어야 하는데, 이는 닷넷 프레임워크가 이미 그렇게 구성되어 있기 때문에 불가피하다. 타입을 변경하는 방법 1.as연사자를 사용 2.cast연산자를 사용 방어적 프로그램 형변환의 가능성 여부는 is 연산자가 수행 형변환 수행을 위해서는 as 연산자를 사용 형변환을 피할 수 없다면,C#언어의 as나 is연산자를 쓸 수 있는지를 먼저 검토하자. 강제적인 형변환은 가끔 예기치 않은 결과를 초래할 수 있다. as와 is는 항상 일관된 동작을 보여주며 형변환이 정확히 수행될 수 있는지를 확인하고 정확한 형변환을 수행한다. 따라서 cast연산을 수행하였을 때 발생할 수 있는 의도하.. 2009. 8. 24.