컴퓨터

    | 니앙팽이 - 객체지향(OOP) | 3-3 | 다형성

    📕 3. 객체지향 상속📄 3. 다형성http://www.tcpschool.com/java/java_polymorphism_concept1) 특징"부모클래스 타입"의 참조 변수로 "자식클래스 타입"의 인스턴스를 참조할 수 있다. 그럼 부모클래스는 자식클래스 전용 멤버에 접근할수 있나?? : ❌부모클래스 타입 변수는 오직 부모클래스 멤버만 접근할 수 있다.그말인 즉슨 비록 자식이 가지고 있다 하더라고 부모에 구현이 안되어 있으면 쓸수가 없다는 말이다.Sophia App.csSophia Equipment.cs다음 예제와 같이 Weapon 클래스 에 Weapon을 상속받은 Sword & Gun 을 넣을수 있다.

    | 니앙팽이 - 객체지향(OOP) | 3-2 | 메소드 오버라이딩 (method overriding)

    📕 3. 객체지향 상속📄 2. 메소드 오버라이딩(method overriding)1). 특징클래스의 메소드를 재정의하고 싶을때 사용하는 문법Class 검 { int 공격력; int 공속; void Attack(){ 대충 3번 치키} } Class 광검 : 검 { ... override void Attack() {빛을 내며 3번치기 그리고 마지막 추가타} ... } 기본 클래스에서 이미 정의된 메소드를 파생 클래스에서 다른 로직으로 메소드를 다시 정의하는 것이라고 할 수 있습니다.private 멤버를 제외한 모든 메소드를 상속받습니다. 이렇게 상속받은 메소드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있음.2). 궁금한데 아니 그럼 멤버변수는 오버라이트 못하나? 😳2) 오버로드 v..

    | 니앙팽이 - 객체지향(OOP) | 3-1 | 상속

    📕 3. 객체지향 상속📄 1. 상속1). 상속(inheritance)?상속이란그림기본 클래스의 멤버와 메소드를 물려받아 새로운 클래스(파생 클래스) 를 생성할 수 있다. 단, 기본 클래스의 생성자와 종료자는 제외.ⓐ 상속의 대상이 되는놈은 2가지 있다. : 1. 클래스 & 2. 인터페이스즉 클래스만 상속하는게 아니라 인터페이스도 상속이 된다.ⓑ C#에서는 단일 상속만 허용됩니다.클래스 & 추상클래스 : 하나만.인터페이스 : 여려개. 예시1. 부모클래스는 없거나, 오직 단 하나만 상속 가능 2. 인터페이스는 여려개도 상속이 된다. Class Foo : _부모클래스_ (또는) _인터페이스1_, _인터페이스2_ , ... , _인터페이스N_ { } 2). 상속의 의의기존에 작성된 클래스를 재활용.기존 클래스를..

    | 니앙팽이 - 객체지향(OOP) | Extra | 상속의 문제

    📕 상속의 문제🔻관련 유튜브를 보려면 사진 클릭🔻상속이라는개념은 사실 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 | 오버로딩 & 객체배열

    📕 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 | 생성자 & 생성자 위임

    📕 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 | 구조체

    📕 2. 객체지향 개발📄 5. 구조체1). 클래스 VS 구조체타입차이에 따른 메모리 할당ClassStruct타입ReferenceValue메모리할당HeapStackstack지역 변수를 저장하며, 실행 중인 함수를 찾아 계산을 수행함변수들은 Stack으로 저장(후입선출)heap참조 타입들이 이 곳에 할당된다.메모리 누수의 대상이 된다.2). 클래스 써버리지 뭘.. 왜?아까말했듯 클래스는 힙영역에 할당된다. 반대로 구조체는 Stack에 들어가므로 가비지컬렉터가 덜 일해도 된다. 메소드를 쓰지 않고 오직 데이터만 그룹 시키고 싶을때, 딱좋다~!그리고 생성자 오버로딩에 사용되기도 한다.3). 사용법구조체가 가능한것ⓐ 프로퍼티 : get, set예시class _className_ { _type_ _fildName_..

    | 니앙팽이 - 객체지향(OOP) | 2-4 | 클래스의 this & 메소드 체이닝

    📕 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 (클래스 멤버)

    📕 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 | 접근한정자

    📕 2. 객체지향 개발📄 2. 접근 한정자1). 한정자호출자의 위치publicprotectedinternalprivate클래스 내부 끼리✔️️✔️️✔️️✔️️파생 클래스 끼리 (Same 어셈)✔️️✔️️✔️️❌비파생 클래스 끼리(Same 어셈)✔️️❌✔️️❌파생 클래스 끼리(diff 어셈)✔️️✔️️❌❌비파생 내부 끼리(diff 어셈)✔️️❌❌❌2). 얜 뭐야? : Internalⓐ unity 에서 인스펙터 창에서 변수를 숨기고 싶을떄 사용 가능하기도 한다.근데 보통 [HideInInspector] 사용해야한다.ⓑ 개발 관점public이랑 비슷한데 같은 어셈블리끼리 공유가 된다.개발에서는 namespace가 다르다? 그렇다면 어셈블리가 다른것.어셈블리는 뭔 소리? ㅋㅋ;