Study/TIL(Today I Learned)

24.11.22 JavaScript, C++

에린_1 2024. 11. 22. 21:16
728x90

JavaScript

async/await

  • 비동기 코드를 더 읽기 쉽게 작성할 수 있도록 도와주는 기능이다. Promise 기반의 비동기 작업을 동기적인 코드 흐름처럼 보이게 하여, 코드의 가독성과 유지보수성을 크게 향상 시킨다.
  • 비동기 작업을 처리할 때 콜백 함수나 Promise 체이닝을 사용하던 방식을 async/await를 사용해 더욱 직관적으로 작성할 수 있다.

기본 개념

  • async
    • 함수 앞에 async 키워드를 붙이면 그 함수는 Promise를 반환하는 비동기 함수가 된다. async 함수는 내부에 await 키워드를 사용할 수 있다.
  • await
    • 비동기 작업이 완료될 때까지 기다리는 역할을 한다. await는 Promise가 해결될 때까지 함수의 실행을 일시적으로 멈추고, 결과값을 반환한다. await 키워드는 오직 async 함수 내부에서만 사용할 수 있다.

장단점

  • 장점
    • 코드 가독성 : async/await은 동기적 코드 흐름을 유지하기 때문에, 비동기 작업을 더욱 직관적으로 작성할 수 있다. 이를 통해 복잡한 콜백 지옥이나 Promise 체이닝을 피할 수 있다.
    • 에러 처리 용이성 : try-catch를 통해 비동기 작업의 에러 처리가 쉽고 간결해진다. 비동기 코드에서 발생하는 예외를 동기 코드와 동일한 방식으로 처리할 수 있다.
    • 순차적 비동기 작업 처리 : 여러 비동기 작업을 순차적으로 실행해야 할 때 체이닝 없이 순차적으로 작성할 수 있어 코드가 더 간단해진다.
  • 단점
    • 병렬 실행 어려움 : await을 사용하면 해당 작업이 완료될 때까지 기다리기 때문에, 여러 비동기 작업을 병렬로 처리하는 것이 어렵다. 이 경우 Proimise.all과 함께 사용해야 효율적인 병렬 처리가 가능하다.
    • 호환성 문제 : 이를 지원하지 않는 환경에서는 사용이 제한된다.

C++

추상 클래스/인터페이스

추상 클래스(Abstract Class)

  • 추상 클래스는 공통적인 속성과 행동을 정의하는 클래스로, 하위 클래스에서 구현을 강제하고자 하는 추상 메서드를 포함할 수 있다. 추상 클래스는 인스턴스화할 수 없으며, 주로 기반 클래스(base class)로 사용된다.

특징

  • 추상 클래스는 일반적인 멤버 변수와 구현된 메서드를 포함할 수 있으며, 동시에 순수 가상 함수(C++) 또는 추상 메서드(c#)도 가질 수 있다.
  • 상속을 통해 다른 클래스에서 공통 기능을 재사용하면서 특정 메서드의 구현을 강제할 수 있다.
  • 추상 클래스 자체로는 인스턴스화 할 수 없고, 반드시 상속받아 구현해야 한다.

인터페이스(Interface)

  • 클래스가 구현해야 할 메서드의 계약(Contract)을 정의하는 일종의 청사진이다. 인터페이스에는 메서드 선언만 포함되며, 메서드의 구체적인 구현은 포함되지 않는다. 인터페이스는 클래스에서 다중 상속과 유사한 역할을 수행할 수 있도록 설계되었다.

특징

  • 인터페이스는 구현 없이 메서드의 정의만을 포함한다.
  • 클래스는 하나 이상의 인터페이스를 구현할 수 있다. 이를 통해 다중 상속과 유사한 효과를 얻을 수 있다.
  • 인터페이스는 객체의 행동 규약을 정의하며, 특정 행동을 구현하도록 강제한다.

추상 클래스와 인터페이스 사용

  • 추상 클래스 사용
    • 공통적인 기본 구현이 필요한 경우 : 여러 파생 클래스에서 공통적으로 사용할 코드가 있다면, 추상 클래스를 사용해 공통 기능을 제공할 수 있다.
    • 상속 관계가 명확하고, IS-A 관계가 성립할 때
  • 인터페이스 사용 시
    • 다중 상속이 필요할 때 : 여러 인터페이스를 구현하여 다중 상속과 유사한 효과를 얻을 수 있다.
    • 행동을 정의하고 구현을 강제하고 싶을 때 : 특정 클래스가 반드시 특정 메서드를 구현해야 한다면 인터페이스가 적합하다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.11.24 C++  (0) 2024.11.24
24.11.23 C++  (0) 2024.11.23
24.11.21 Node.js, Unity  (0) 2024.11.21
24.11.20 CS  (0) 2024.11.20
24.11.19 CS  (0) 2024.11.19