분류 전체보기

    | 니앙팽이 - 오토마타 | 1 | FSM 유한상태기계

    FSM : 유한상태기계1. 목차DFANFANFA -> DFA 변환 알고리즘FSM 변환 알고리즘유니티 코드2. DFA1). 정의결정적 유한 오토마타 (Determinstic Finite Automata) 5개로 구성된 튜플이다.2. 특징next state가 단 하나로 결정됨ε (empty input)에 대한 전이가 없음2). 수식M=(Q,∑,∂,q0,F){M = (Q, ∑, ∂, q0, F)}M=(Q,∑,∂,q0,F)Q : set of state노드, 상태를 의미인풋으로 들어가는 상태는 원소 하나일수도, 원소의 집합일 수 있다.∑ : set of symbols called input간선(화살표), 전이함수의 인풋 매개변수로 사용∂ : 전이 함수∂(상태, 인풋) -> 상태q0 : inital state초기 ..

    | 니앙팽이 - 객체지향(OOP) | Extra | 응집도 결합도

    응집도와 결합도1. 응집도모듈내부 요소들간의 연관성 척도모듈 내부의 기능적인 응집 정도를 나타냄높을 수록 좋아요 ❤️A모듈이 아닌 곳에 a 기능 들이 흩어져 있다던가 또는 A 모듈에 a 기능 외에 b, c, d 기능들도 섞여서 복잡하게 구현되어 있다면 수정하기가 힘들겠죠.2. 결합도모듈이 다른 모듈에 의존하는 정도의 척도참조대상의 참조Degree가 얼마나 되는지..낮을 수록 좋아요 ❤️결합도가 높으면 변경하고 검토해야되는 모듈 수가 많아지는 단점이 있으니, 결합도는 낮을수록 검토해야되는 소스의 수가 적어져서 코드를 수정하기가 쉬워집니다.3. 참고https://medium.com/@jang.wangsu/설계-용어-응집도와-결합도-b5e2b7b210ff

    | 니앙팽이 - 객체지향(OOP) | 3-5 | 인터페이스

    📕 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 | 추상클래스

    📕 3. 객체지향 상속📄 4. 추상 클래스1). 추상 클래스(abstract class)?ⓐ 하나 이상의 추상 메소드를 포함하는 클래스를클래스는 클래스인데.. 추상클래스 그 자체로는 인스턴스를 만들 수 없는 미완성 클래스다.. 😶들어있는 추상 매서드도 미완성이다.(구현부가 없다)오직 상속용으로, 파생클래스 만 쓸수 있는 미완성 클래스오버라이딩하고 나서야 비로소 자식 클래스의 인스턴스를 생성할 수 있게 된다..추상 클래스는 추상 메소드를 포함하고 있다는 점을 제외하면 일반 클래스와 모든 점이 같은것이, 생성자와 멤버변수, 일반 메소드도 포함할 수 있다.ⓑ 생긴 모습추상메소드가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다.abstract class 클래스이름 { /*...*/ abstrac..

    | 니앙팽이 - 객체지향(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); 생성자 위..