본문 바로가기

잡다한 것

NCS - 정보기술2

728x90
반응형
SMALL

프로그래밍

  • 객체 지향 프로그래밍(OOP)의 특징에 대해 설명하시오.

객체 지향 프로그래밍(OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나로, 프로그램을 객체의 모음으로 구성하는 방식입니다. OOP의 주요 특징은 다음과 같습니다.

  1. 캡슐화(Encapsulation): 객체의 상태와 행위를 하나로 묶고, 외부에서 접근할 수 없도록 보호하는 것입니다. 객체가 필요한 정보만을 공개하고, 내부 구현을 숨기는 것이 가능해져 정보 은닉이 가능해집니다.
  2. 상속(Inheritance): 이미 존재하는 클래스를 기반으로 새로운 클래스를 만들어내는 것입니다. 상속을 통해 코드 재사용이 용이해지며, 상위 클래스의 속성과 메서드를 하위 클래스가 모두 상속받아 사용할 수 있습니다.
  3. 다형성(Polymorphism): 같은 메서드가 다양한 객체에서 다양한 방식으로 작동하는 것입니다. 상속과 함께 사용되며, 같은 이름의 메서드를 여러 객체가 다양한 방식으로 구현할 수 있습니다.
  4. 추상화(Abstraction): 객체의 공통적인 속성과 기능을 추출하여 일반화시키는 것입니다. 객체 지향 프로그래밍에서 추상화는 인터페이스와 추상 클래스를 통해 구현됩니다.

OOP 코드의 재사용성, 유지보수성, 확장성 등의 이점을 제공하며, 객체를 중심으로 프로그램을 구성함으로써 코드의 가독성과 유연성이 향상됩니다.

 

 

 

  • Java에서 인터페이스와 추상 클래스의 차이점에 대해 설명하시오.

Java에서 인터페이스(interface)와 추상 클래스(abstract class)는 모두 추상화를 통한 다형성(polymorphism)을 구현하는 방식입니다. 하지만 두 가지 개념은 몇 가지 차이점이 있습니다.

 

구현 방식:

  • 인터페이스는 메서드의 시그니처(signature)만을 정의하고, 구현을 하지 않습니다. 인터페이스에서 선언된 메서드는 반드시 구현 클래스에서 구현되어야 합니다.
  • 추상 클래스는 일반 클래스와 같이 필드, 생성자, 메서드를 가지며, 추상 메서드를 포함할 수 있습니다. 추상 메서드는 선언만 하고, 구현은 하위 클래스에서 해야 합니다.

상속과 인터페이스 구현:

  • 추상 클래스는 하위 클래스에서 상속을 받아야 하지만, 인터페이스는 구현 클래스에서 인터페이스를 구현(implement)해야 합니다. 추상 클래스는 단일 상속만을 지원하고, 인터페이스는 다중 구현(multiple implementation)이 가능합니다.
  • 인터페이스는 구현하는 클래스에서 인터페이스의 메서드를 모두 구현해야 하지만, 추상 클래스는 일부 메서드만 추상 메서드로 선언하고, 일부 메서드는 구현할 수 있습니다.

사용 목적:

  • 인터페이스는 객체 간의 상호작용을 정의하기 위해 사용됩니다. 예를 들어, Comparable, Serializable 등이 인터페이스로 구현되어 있습니다.
  • 추상 클래스는 하위 클래스에서 공통적인 필드와 메서드를 정의하고, 하위 클래스에서 구현해야 할 메서드를 강제하기 위해 사용됩니다. 예를 들어, AbstractList, AbstractMap 등이 추상 클래스로 구현되어 있습니다.

따라서, 인터페이스와 추상 클래스는 다양한 상황에서 다른 용도로 사용됩니다. 인터페이스는 객체 간의 상호작용을 위한 규약을 정의하고, 추상 클래스는 공통적인 필드와 메서드를 정의하며, 하위 클래스에서 구현해야 메서드를 강제하는 역할을 합니다.

 

 

 

  • 스프링 프레임워크에서 IoC와 DI의 차이점에 대해 설명하시오.

스프링 프레임워크에서 IoC(Inversion of Control)와 DI(Dependency Injection)는 둘 다 객체 간의 의존성을 관리하기 위한 방식입니다. 하지만 둘은 다른 개념입니다.

  1. IoC(Inversion of Control): 프로그램의 제어 흐름이 뒤바뀌는 것을 의미합니다. 기존에는 개발자가 코드에서 객체를 생성하고, 객체 간의 관계를 설정하는 등의 작업을 수행했습니다. 하지만 IoC는 개발자가 코드에서 객체를 생성하고, 객체 간의 관계를 설정하는 것이 아니라, 컨테이너(container)가 객체를 생성하고, 관계를 설정하는 작업을 수행합니다. 이를 통해 개발자는 코드를 작성할 때 객체 간의 관계에 집중할 수 있게 되며, 코드의 유지보수성이 향상됩니다.
  2. DI(Dependency Injection): IoC의 구체적인 구현 방법 중 하나입니다. DI는 객체가 의존하는 객체를 직접 생성하거나 관리하지 않고, 외부에서 생성된 객체를 주입(injection)받아 의존성을 해결하는 것입니다. 객체가 의존하는 다른 객체의 인스턴스를 직접 생성하거나 참조하는 것이 아니라, 외부에서 의존 객체를 생성하고, 이를 객체 생성 시점에 주입해주는 방식입니다.

따라서, IoC DI 개발자가 객체 간의 관계를 관리하는 것이 아니라, 컨테이너가 객체 간의 관계를 관리하고, 의존성을 해결하는 것입니다. IoC 제어의 역전을 의미하며, DI IoC 구체적인 구현 방법 하나입니다. IoC DI 코드의 가독성, 유지보수성, 테스트 용이성 등을 향상시키는 데에 기여를 합니다.

 

 

 

  • 함수형 프로그래밍의 특징에 대해 설명하시오.

함수형 프로그래밍은 입력과 출력 사이에 존재하는 상태를 최소화하고, 함수 호출에 의한 계산을 강조하는 프로그래밍 패러다임입니다. 이를 통해 코드의 복잡성을 줄이고, 코드의 재사용성과 유지보수성을 높일 수 있습니다.

함수형 프로그래밍의 주요 특징은 다음과 같습니다.

  1. 함수의 일급 객체(First-class Functions): 함수를 일반 값처럼 다룰 수 있는 기능을 가지고 있습니다. 함수를 변수에 할당하거나, 함수의 인자로 다른 함수를 전달할 수 있으며, 함수에서 새로운 함수를 반환할 수도 있습니다.
  2. 불변성(Immutability): 데이터가 변하지 않는 것을 의미합니다. 즉, 한번 생성된 데이터는 수정할 수 없으며, 새로운 데이터를 생성해야 합니다. 이를 통해 프로그램의 예측성을 높일 수 있습니다.
  3. 순수 함수(Pure Functions): 함수가 부작용(side-effect)을 일으키지 않고, 입력 값만을 가지고 계산을 수행하는 함수를 의미합니다. 이를 통해 동일한 입력에 대해서는 항상 같은 결과를 보장하며, 코드의 재사용성과 테스트 용이성을 높일 수 있습니다.
  4. 고차 함수(Higher-order Functions): 함수를 인자로 받거나, 함수를 반환하는 함수를 의미합니다. 이를 통해 코드의 중복을 줄이고, 코드의 재사용성을 높일 수 있습니다.
  5. 레퍼런스 투명성(Referential Transparency): 어떤 표현식의 값이 그 표현식 내부의 값으로만 결정되는 것을 의미합니다. 즉, 함수 호출의 결과가 그 호출문에서 사용되는 값으로 대체 가능한 것을 의미합니다. 이를 통해 코드의 예측성을 높일 수 있습니다.

함수형 프로그래밍은 객체 지향 프로그래밍과 다르게, 데이터의 상태를 변경시키지 않고, 순수 함수를 중심으로 코드를 작성합니다. 이를 통해 코드의 가독성과 유지보수성을 높일 있으며, 병렬처리와 분산처리를 쉽게 구현할 있습니다.

728x90
반응형
LIST

'잡다한 것' 카테고리의 다른 글

NCS - 정보기술5  (0) 2023.03.14
NCS - 정보기술4  (0) 2023.03.14
NCS - 정보기술3  (0) 2023.03.14
NCS - 정보기술1  (0) 2023.03.14
NCS - 회계1  (0) 2023.03.14