목록전체보기 (71)
HaPpY hApPy
value reference 타입은 작고 단순한 타입에, 타입은 클래스간 상속이 필요한 경우 값을 저장하기에 좋고 행동을 저장하기에 좋다 타입이 단지 데이터만 저장하기위해 value 타입의 추후 동작방식에 대해서 조금이라도 의구심이 든다면 reference타입을 사용 모든 public interface가 단지 내부적인 값을 획득하거나 수정하기 위해서만 사용되는가 전혀 상속될 가능성이 없는가 다형적일 필요가 없는가.
5장은 그냥 자신이 작성한 클래스에 대해 좀더 자세한 정보를 사용자에게 주자라는 취지인듯 하다. 언젠가 내가 코딩을 하고 누군가가 내가 만든 클래스를 사용하게 되면, 그때 이부분 다시 공부해봐야겠다, 지금은 일단 패스 ㅡ ㅡㅎ
namespace ConsoleApplication{ class Program { class CStudent { private string _name; public CStudent() { _name = "못생긴 학생"; } public string Name { get { return _name; } set { CheckState(); _name = value; CheckState(); } } [Conditional("DEBUG")] public void CheckState() { Console.WriteLine("대입 하기전 혹은 후 학생의 이름 {0}",_name); } } static void Main(string[] args) { CStudent student1 = new CStudent(); st..
캐나다에서 몇년간 영어공부만 하다가 코딩을 다시 할때 젤 웃겻던게 is, as 문법이다 ㅎㅎ그리고 이제 시간이 조금 지나 사용할 때마다 아주 키워드 이름을 잘 지은거 같다. ㅎㅎ 직관적이라 좋다. 형 변환성 가능성 체크 는 is로 하고형 변환은 as로 하면된다. is, as 는 사용자가 정의한 형변환 연산자의 존재를 고려하지 않기 때문에 런타임의 수행성능 효율도 좋다. as 와 cast의 효율은 밑에서 비교해보자asobject o = Factory.GetObject();// Version one:MyType t = o as MyType;if (t != null){// work with t, it's a MyType.}else{// report the failure.} caseobject o = Facto..
1. 상수형으로 컴파일 타임 상수(const)와, 런타임 상수(readonly) 두가지의 차이점(빠르지만 가끔 위험한 프로그램), (가끔 느리지만 안전한 프로그램) 당연히 우린 후자를 선택해야한다! 2. 컴파일 타임 상수는 기본적인 내장자료형이나 enum string에 대해서만 사용가능 하지만 내장 자료형이 아닌DateTime 을 new 연산자로 초기화 하려 시도하면 컴파일시에 오류가 발생한다.// Does not compile, use readonly instead:private const DateTime classCreation = new DateTime(2000, 1, 1, 0, 0, 0); 3. 또하나 큰 차이점 특정 프로그램에 const를 사용해서 컴파일 해서 배포한 후에나중에 다시 그 값이 변..
1. 프라퍼티에 이렇게 숫자 인덱스를 붙여서 사용하는 방법도 있고 public int this[int index]{get { return theValues[index]; }set { theValues[index] = value; } } 2. 이렇게 문자열 인덱스를 사용하여 맵이나 디렉토리와 같은 자료구조의 표현도 가능하다public Address this[string name]{get { return adressValues[name]; }set { adressValues[name] = value; } } 3. 위 2개를 섞어 사용할수도 있다.public int this[int x, string name]{get { return ComputeValue(x, name); } } 이 쯤에서 간단히 끝!
Effective c++ 이라는 책을 읽은 기억에 혹시나 검색했는데 있다..-0-;; 읽고 나서 그냥 대충 사용할 만한 문법이나 중요한점만 간단하게 기록하기 위해 적는다.
음,,,대략적인 이해는 가는데 전체 이해가 안간다. 일단 C# 소스 짜여져있는거 보면서 옮기면서 했는데, 나중에 좀더 세밀하게 봐야겠다. 예제에서는 피자 가계를 예를들고있다, 피자 가계마다(NewYork, Chicago) 만드는 피자 종류는 같다.(CheesePizza, ClamPizza) 하지만 들어가는 재료(Dough, Sauce, Cheese, veggies ,Pepperoni, Clam) 와 요리하는 방법(ThickCrustDough, ThinCrustDough 과 NaNaCheese, ReggianoCheese)은 다를수있다. 유심히 봐야할 부분은 Pizza클래스의 Prepare()함수가 어떻게 구현되는지, PizzaStore 클래스의 CreatePizza() 함수를 ChicagoPizzaSto..
[2013.10.26 수정]일단 팩토리 패턴은 크게 팩토리 패턴, 팩토리 메소드 패턴, 추상 팩토리 패턴 (뒤로 갈수록 복잡하다)Factory Pattern 은 너무 단순해서 그냥 거의 리팩토링 수준으로 패턴이라 하기 그렇다,단순히 객체를 생성하는 부분을 한곳에 모아서 관리를 용이하게 한다. class CPizzaStore { private CSimplePizzaFactory m_factory; public CPizzaStore(CSimplePizzaFactory factory) { m_factory = factory; } public CPizza Order(string type) { CPizza pizza; pizza = m_factory.CreatePizza(type); pizza.Prepare();..
이 패턴을 이용한 예제는 두가지가 있었다, 한가지는 유명한 커피샵의 커피 주문,(눈여겨 볼부분은, 커피 종류 와, 사이즈에 따른 가격, 그리고 추가되는 샷이나 휘핑 같은걸 어떻게 가격을 매기는지) 다른 한가지는 게임에서 데미지 입었을때,(데미지를 받앗을때 보호막이 있는지 없는지, 보호막이 있을경우는 데미자가 100%, 보호막이 없을경우 데미지 50%, 마치 스타 프로토스 같이) Head First Design Pattern 에는 커피 주문을 예로 되어있었다. 내가 까먹을경우"첨가물과, 구상 구성요소의 차이점을 기억할것!""첨가물은 여러번 들어갈수 있지만, 구상 구성요소는 한번만 들어간다!!" 먼저 커피 사이즈 Enum BeverageSize이다. namespace DecoratorPattern { pub..