동기와 비동기는 데이터를 주고 받는 방식에 대한 개념이다. 

동기(Synchronous)

동시에 일어나다.

요청과 결과가 동시에 일어난다는 의미를 가진다. 즉 요청을 하게되면 시간이 얼마나 걸리던지 요청한 자리에서 대기한 후 결과가 주어져야 다음으로 넘어가게된다.

 

- 설계가 간단하고 직관적이다.

- 결과가 주어질 때까지 대기해야한다.

 

비동기(Asynchronous)

동시에 일어나지 않는다.

요청과 결과가 동시에 일어나지 않는다는 의미이다. 즉 요청한 자리에서 결과가 주어지지 않으며 작업 처리 단위를 동시에 맞추지 않아도 된다.

 

- 동기보다 복잡하다.

- 결과가 주어지는 시간 동안 다른 작업을 할 수 있다.

 

 

동기는 요청 이후 확실하게 결과 확인이 필요한 상황에서 사용되고 비동기 방식은 요청 이후 결과가 언제 들어오든 상관이 없는 경우에 사용된다.

728x90
반응형

'Program Language' 카테고리의 다른 글

Reserved Word, Keyword  (0) 2023.01.20
Expression, Statement  (0) 2023.01.20

abstract

추상적인

구현이 완전하지 않은 상태임을 타나내는 키워드이다.

클래스, 메서드, 프로퍼티, 인덱서, 이벤트와 함게 사용될 수 있다. 

일반적으로 추상 클래스를 구현하는데 사용되며 자체적으로는 인스턴스화 되지 않고 파생된 비추상 클래스에 의해 구현되어 사용된다. 

 

    abstract class Person
    {
        public abstract int GetInfo();
    }

    class Joon : Person
    {
        private int m_age;
        public Joon(int age) => m_age = age;
        public override int GetInfo() => m_age;
    }

    public class Program
    {
        static void Main(string[] args)
        {
            // Error, cannot create an instance of the abstract type.
            Person person = new Person(); 

            Joon joon = new Joon(30);
            Console.WriteLine(joon.GetInfo());
        }
    }

Feature

- 추상 클래스는 인스턴스화할수없다.

- 추상 클래스는 추상 메서드와 접근자를 포함할 수 있다.

- abstract 제한자는 sealed 제한자와 반대의미이므로 같이 사용할 수 없다.

  (abstract : 상속을 필요로하는 제한자, sealed : 상속을 방지하기위한 제한자)

- 추상 클래스로부터 파생된 클래스는 반드시 추상 메서드와 접근자의 구현이 필요하다.

 

메서드와 프로퍼티의 선언에서 abstract 제한자의 사용은 구현을 포함하지 않는것을 나타낸다.

- 추상 메서드는 암묵적으로 가상 메서드이다.

- 추상 메서드는 오직 추상 클래스 내에서만 선언이 허용된다.

- 추상 메서드는 구현이 없어야하므로 선언시 중괄호가 필요하지 않다.

 

Derived abstract class

추상 클래스를 파생 클래스로 만들어 특정 가상 메서드의 상속하여 추상 메서드로 가상 메서드를 재정의할 수 있다.

    public class BaseClass
    {
        public virtual void VirtualMethod(int i) { }
    }

    public abstract class AbstractClass : BaseClass
    {
        public abstract override void VirtualMethod(int i);
    }

	//DerivedClass.ViertualMethod는 BaseClass.VirtualMethod에 접근할 수 없다.
    public class DerivedClass : AbstractClass
    {
        public override void VirtualMethod(int i)
        {
            throw new NotImplementedException();
        }
    }

추상 클래스로부터 파생된 클래스는 메서드의 원래 구현에 접근할 수 없다. 

이러한 방식으로 추상 클래스는 파생 클래스로부터 가상 메서드의 구현을 강제할 수 있다.

728x90
반응형

'Program Language > C#' 카테고리의 다른 글

C# 상수 키워드 : const  (0) 2023.01.31
C# 비동기화 키워드 : async, await  (0) 2023.01.31
Main method  (0) 2023.01.19
테스트 환경  (0) 2023.01.17
.Net Framework  (0) 2023.01.17

예약어

예약어는 식별자로 사용할 수 없는 문자를 뜻한다.

현재 또는 향후 사용될 문자까지 예약어로 등록되기도 한다.

*식별자(identifier)

변수, 함수, 클래스 등의 이름을 지정하는데 사용되는 문자열

 

키워드

컴파일러에게 특별한 의미를 가지고 있는 문자이다. 

키워드가 가지는 특징은 언어마다 다른데 키워드를 식별자로 사용할 수 있는 경우도 있고 그렇지 않은 경우도 있다.

 

두 개념을 명확하게 구분짓는게 애매하다. 

어떤 언어에서는 모든 키워드가 예약어로 되어있어 키워드를 식별자로 사용하는게 불가능하지만 또 일부 언어에서는 키워드를 식별자로 사용하기도 하기 때문에 키워드를 예약어로 단정할 수 없고 예약어 또한 현재 사용중이 아닌 문자도 사용을 못하게 하는 경우가 있기 때문에 모든 예약어가 키워드처럼 의미를 가지고 있지 않을 수 있다.

 

그래서 예약어는 식별자로 사용 못하는 문자 키워드는 특별한 의미를 가지고 있는 문자로 구분하고 각 언어마다 키워드와 예약어를 파악하는게 중요하는게 좋을것같다.

 

💡키워드를 식별자로 사용하는 예 : Fortan ( if then then then = else else else = then)

💡예약어가 키워드로 사용되지 않는 예 : Java  (goto)

 

키워드 종류

키워드는 사용되는 방식과 기능 그리고 문맥에 따라서 종류가 나누어지며 언어마다 각기 다른 특징을 가지고 있기도 하지만 공통되는 부분도 많다.

 

일반적으로 사용되는 키워드를 정리한다.

 

제한자(Modifier)

타입과 멤버를 누가 수정할 수 있는지 특정하여 나타내는 키워드이다. 프로그램의 특정한 부분이 다른 곳에서 수정되는것을 허용하거나 방지하도록한다.

 

접근 제한자(Access Modifier)

클래스, 메서드, 프로퍼티, 필드 등의 멤버를 선언할 때 적용되는 것으로 클래스간의 멤버 접근성을 정의한다.

 

구문(Statement)

구문은 프로그램의 흐름과 연관된 키워드이다.

대표적으로 if, for 등의 키워드가 있다.

 

메서드 매개변수(Method Parameter)

메서드의 매개변수에서만 적용되는 키워드이다.

 

네임스페이스 키워드(Namespace Keywords)

네임스페이스 및 관련 연산자에 적용되는 키워드이다.

using ... 

 

연산자 키워드(Operator Keywords)

기타 작업을 수행하는 키워드이다.

sizeof ...

 

접근 키워드(Access keywords)

객체 또는 클래스에 접근하는데 사용된다.

this ...

 

리터럴 키워드(Literal Keywords)

특정 값으로 평가될 수 있는 키워드이다.

null, false, true 등

 

타입 키워드(Type Keywords)

자료형에 사용되는 키워드이다.

int, char, float ...

 

문맥상 키워드(Contextual Keywords)

특정 문맥상에서만 키워드로 취급된다.

 

 

728x90
반응형

'Program Language' 카테고리의 다른 글

Sync, Async  (0) 2023.01.26
Expression, Statement  (0) 2023.01.20

+ Recent posts