| 니앙팽이 - 객체지향(OOP) | 3-5 | 인터페이스
·
CS/SW 공학
📕 3. 객체지향 상속📄 5. 인터페이스1). 인터페이스?인터페이스는 구성원이 오직 메소드만 있고 모든 메소드가 추상 메소드인 경우입니다추상메소드보다 더 심각하게..혼자서 객체도 못만들고오직 추상 메소드만 있고, 변수를 선언할 수 없다(단 상수는 선언가능)✨하지만 다중 상속이 가능!!!✨2). 특징인터페이스의 모든 멤버가 public이고, 모든 메소드는 알아서 abstract가 된다(public abstract 가 붙은것으로 처리).다중 상속이 가능인터페이스도 다형성이 가능하다.interface Idieable {public void Die();} interface Imovable {public void Move(int x, int y);} interface monster : Unit , Idieable..
| 니앙팽이 - 객체지향(OOP) | 3-4 | 추상클래스
·
CS/SW 공학
📕 3. 객체지향 상속📄 4. 추상 클래스1). 추상 클래스(abstract class)?ⓐ 하나 이상의 추상 메소드를 포함하는 클래스를클래스는 클래스인데.. 추상클래스 그 자체로는 인스턴스를 만들 수 없는 미완성 클래스다.. 😶들어있는 추상 매서드도 미완성이다.(구현부가 없다)오직 상속용으로, 파생클래스 만 쓸수 있는 미완성 클래스오버라이딩하고 나서야 비로소 자식 클래스의 인스턴스를 생성할 수 있게 된다..추상 클래스는 추상 메소드를 포함하고 있다는 점을 제외하면 일반 클래스와 모든 점이 같은것이, 생성자와 멤버변수, 일반 메소드도 포함할 수 있다.ⓑ 생긴 모습추상메소드가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다.abstract class 클래스이름 { /*...*/ abstrac..
| 니앙팽이 - 객체지향(OOP) | 3-3 | 다형성
·
CS/SW 공학
📕 3. 객체지향 상속📄 3. 다형성http://www.tcpschool.com/java/java_polymorphism_concept1) 특징"부모클래스 타입"의 참조 변수로 "자식클래스 타입"의 인스턴스를 참조할 수 있다. 그럼 부모클래스는 자식클래스 전용 멤버에 접근할수 있나?? : ❌부모클래스 타입 변수는 오직 부모클래스 멤버만 접근할 수 있다.그말인 즉슨 비록 자식이 가지고 있다 하더라고 부모에 구현이 안되어 있으면 쓸수가 없다는 말이다.Sophia App.csSophia Equipment.cs다음 예제와 같이 Weapon 클래스 에 Weapon을 상속받은 Sword & Gun 을 넣을수 있다.
| 니앙팽이 - 객체지향(OOP) | 3-2 | 메소드 오버라이딩 (method overriding)
·
CS/SW 공학
📕 3. 객체지향 상속📄 2. 메소드 오버라이딩(method overriding)1). 특징클래스의 메소드를 재정의하고 싶을때 사용하는 문법Class 검 { int 공격력; int 공속; void Attack(){ 대충 3번 치키} } Class 광검 : 검 { ... override void Attack() {빛을 내며 3번치기 그리고 마지막 추가타} ... } 기본 클래스에서 이미 정의된 메소드를 파생 클래스에서 다른 로직으로 메소드를 다시 정의하는 것이라고 할 수 있습니다.private 멤버를 제외한 모든 메소드를 상속받습니다. 이렇게 상속받은 메소드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있음.2). 궁금한데 아니 그럼 멤버변수는 오버라이트 못하나? 😳2) 오버로드 v..
| 니앙팽이 - 객체지향(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-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가 다르다? 그렇다면 어셈블리가 다른것.어셈블리는 뭔 소리? ㅋㅋ;