| 니앙팽이 - 객체지향(OOP) | 3-1 | 상속
·
CS/SW 공학
📕 3. 객체지향 상속📄 1. 상속1). 상속(inheritance)?상속이란그림기본 클래스의 멤버와 메소드를 물려받아 새로운 클래스(파생 클래스) 를 생성할 수 있다. 단, 기본 클래스의 생성자와 종료자는 제외.ⓐ 상속의 대상이 되는놈은 2가지 있다. : 1. 클래스 & 2. 인터페이스즉 클래스만 상속하는게 아니라 인터페이스도 상속이 된다.ⓑ C#에서는 단일 상속만 허용됩니다.클래스 & 추상클래스 : 하나만.인터페이스 : 여려개. 예시1. 부모클래스는 없거나, 오직 단 하나만 상속 가능 2. 인터페이스는 여려개도 상속이 된다. Class Foo : _부모클래스_ (또는) _인터페이스1_, _인터페이스2_ , ... , _인터페이스N_ { } 2). 상속의 의의기존에 작성된 클래스를 재활용.기존 클래스를..
| 니앙팽이 - 객체지향(OOP) | Extra | 상속의 문제
·
CS/SW 공학
📕 상속의 문제🔻관련 유튜브를 보려면 사진 클릭🔻상속이라는개념은 사실 OOP 있어서 문제점이 많다. 컴포지트 패턴 (Composite Pattern)으로 해결하자.📄 1. Is-a Has-a1). Is-A 관계 (상속관계)ⓐ 학생은 사람이다, 장학생은 학생이다.Inheritance : class B is a Class A (or class A is extended by class B)ChildClass Is A ParentClass : ChildClass⊇ParentClassChildClass ⊇ ParentClassChildClass⊇ParentClassⓑ 상속관계파생클래스로 가면 갈수록 구체화 혹은 특별화(specialization)기본클래스로 가면 갈수록 일반화(generalization)2). H..
| 니앙팽이 - 객체지향(OOP) | 2-7 | 오버로딩 & 객체배열
·
CS/SW 공학
📕 2. 객체지향 개발📄 7. 함수 오버로딩1). 특징위의 똑같은 이름의 생성자라고 해도, 함수마다 매개변수가 다른 경우가 있다. 그점에서 함수 오버로딩은 생성자 위임과 일맥상통하는 부분이 있다.ⓐ 오버로딩 : 이름은 같지만 그냥 다른 함수다음 3가지 경우가 이름이 같더라도 함수로 구분짓는다.메소드 매개변수의 숫자와 데이터 타입 그리고 순서메소드의 리턴 타입class Overloading{ public void Same(int param) { Console.WriteLine($"{param} : 숫자를 출력하는 함수입니다."); } public void Same(String param){ Console.WriteLine($"{param} : 문자를 출력하는 함수입니다."); } } void Main(){..
| 니앙팽이 - 객체지향(OOP) | 2-6 | 생성자 & 생성자 위임
·
CS/SW 공학
📕 2. 객체지향 개발📄 6. 생성자 & 생성자 위임1). 생성자는 왜쓰나?클래스를 가지고 객체를 생성한다고 인스턴스 변수가 초기화되지는 않는다인스턴스 변수의 초기화하기 위해서는 생성자 함수를 정의한다. 마치 메소드 처럼public과 같은 한정자도, 리턴형이든 아~무것도 적지말고 작성하면 된다.2). 생성자 위임ⓐ 생성자 위임 쓰는 이유생성자 매개변수 순서에 상관없이 잘 작동하게끔 만들고 싶다..매개변수의 순서를 바꾸고 싶을떄.매개변수 일부 생략하더라도 작동하게 하고싶을때ⓑ 비교생성자 위임 사용안하면.. 0시간 0분 20초를 달렸다? ❌ Time(0, 0, 20); 20초 달렸으면 : Time(20); 5분 0초 달렸으면 : Time(5, 0); 6시간을 달렸으면 : Time(6, 0, 0); 생성자 위..
| 니앙팽이 - 객체지향(OOP) | 2-5 | 구조체
·
CS/SW 공학
📕 2. 객체지향 개발📄 5. 구조체1). 클래스 VS 구조체타입차이에 따른 메모리 할당ClassStruct타입ReferenceValue메모리할당HeapStackstack지역 변수를 저장하며, 실행 중인 함수를 찾아 계산을 수행함변수들은 Stack으로 저장(후입선출)heap참조 타입들이 이 곳에 할당된다.메모리 누수의 대상이 된다.2). 클래스 써버리지 뭘.. 왜?아까말했듯 클래스는 힙영역에 할당된다. 반대로 구조체는 Stack에 들어가므로 가비지컬렉터가 덜 일해도 된다. 메소드를 쓰지 않고 오직 데이터만 그룹 시키고 싶을때, 딱좋다~!그리고 생성자 오버로딩에 사용되기도 한다.3). 사용법구조체가 가능한것ⓐ 프로퍼티 : get, set예시class _className_ { _type_ _fildName_..
| 니앙팽이 - 객체지향(OOP) | 2-4 | 클래스의 this & 메소드 체이닝
·
CS/SW 공학
📕 2. 객체지향 개발 📄 4. 클래스의 this 1). this 란... 🔍 클래스를 이용해 구체적인 제품으로 만든 Instance를 가르키는 것 그 인스턴스 그 자신의 참조 변수 2). 왜 쓰는건가? 🤔 Doc이나, 블로그 돌아나니면서 알아본 결과.. ⓐ 명시성 👁‍🗨 (Class 작성 관점) Class 메소드 작성시, 매개변수와 인스턴스의 멤버변수 명시적으로 구분하기 위해 this 사용 ex)매개변수와 멤버변수의 이름이 같습니다. 이럴때 this 를 사용하여 구분할 수 있습니다. /*클래스*/ class Foo { private int value; Foo(int value(매개변수) ){ /* value(멤버변수)= value(매개변수);*/?? 이런식으로 작성해도 괜찮긴한데 this.value(멤..
| 니앙팽이 - 객체지향(OOP) | 2-3 | Static (클래스 멤버)
·
CS/SW 공학
📕 2. 객체지향 개발📄 3. Static1). 클래스 변수 & 인스턴스 변수?클래스 내에서 멤버변수(클래스에 포함된 변수)는 선언된 위치에 따라 2가지로 구분됨.클래스 변수 : static variable인스턴스 변수 : instance varibale2). 예시public class Enemy { static int mEnemyCount = 0; 클래스 변수 string mEnemyName; 인스턴스 변수 public Enemy(string _enemyName){ mEnemyCount++; this.mEnemyName = _enemyName;} } ................................................ static void Main(string[] args) { Ene..
| 니앙팽이 - 객체지향(OOP) | 2-2 | 접근한정자
·
CS/SW 공학
📕 2. 객체지향 개발📄 2. 접근 한정자1). 한정자호출자의 위치publicprotectedinternalprivate클래스 내부 끼리✔️️✔️️✔️️✔️️파생 클래스 끼리 (Same 어셈)✔️️✔️️✔️️❌비파생 클래스 끼리(Same 어셈)✔️️❌✔️️❌파생 클래스 끼리(diff 어셈)✔️️✔️️❌❌비파생 내부 끼리(diff 어셈)✔️️❌❌❌2). 얜 뭐야? : Internalⓐ unity 에서 인스펙터 창에서 변수를 숨기고 싶을떄 사용 가능하기도 한다.근데 보통 [HideInInspector] 사용해야한다.ⓑ 개발 관점public이랑 비슷한데 같은 어셈블리끼리 공유가 된다.개발에서는 namespace가 다르다? 그렇다면 어셈블리가 다른것.어셈블리는 뭔 소리? ㅋㅋ;
| 니앙팽이 - 객체지향(OOP) | 2-1 | Class & Instance
·
CS/SW 공학
📕 2. 객체지향 개발📄 1. Class & Instance1). new를 통해 Instance 생성new 연산자로 인스턴스(객체)를 만든다.(메모리 heap영역에) 데이터 저장 공간을 할당받고 -> 그 공간의 참조값(해시코드)를 객체에게 반환해준다. -> 이어서 생성자를 호출한다.2). 예시class Calculator //클래스(공장) { int left, right; public void setOprands(int left, int right){ this.left = left; this.right = right; } public void sum(){System.out.println(this.left + this.right);} public void avg(){System.out.println((th..
| 니앙팽이 - 객체지향(OOP) | 1 | 객체지향 프로그래밍
·
CS/SW 공학
📕 1. 객체지향 개요 📄 1. 객체지향 1). C 같은 언어대신 C++, Java, C#를 쓰는 이유? C#으로 게임를 만들어본 경험에서 나온 생각을 기술해보겠다. 궁극적으로 C보다 생산성이 높아지기 때문이다.이건 C언어를 써보고 접근해야 다음 장점이 왜 장점인지 알 것이다. 처음부터 OOP 기반 언어를 쓰면 이게 기본인줄 알겠지..1. 추상적인 요소와 다형성은 중복 코드를 막고 변경에 강한 개발을 가능케 해준다.2. 상속은 확장된 기능을 가진 요소를 만들기 유용하고 다형적 타입 판별에 도움을 준다.3. 무분별한 정보 의존을 줄여주고 타입 체크로 메모리 안정성에 기여한다.4. 파일 단위가 아닌 코드 단위의 서브 프로그램 제작이라는 관점에서 직관적인 개발이 가능케 한다.① 타입 유연성 추상적인 요소와..