TIL | 면접 카타 12, 20번

bubblegum·2024년 4월 8일
0

Today I learn(TIL)

목록 보기
59/84
post-thumbnail

12. 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요?

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍의 한 패러다임으로, 소프트웨어를 객체들의 모임으로 파악하고 구현하는 방법론입니다. 객체지향 프로그래밍은 실세계의 객체(사람, 자동차, 계좌 등)를 모델링하여 소프트웨어 개발을 보다 직관적이고 효율적으로 만들어 줍니다.

객체지향 프로그래밍의 주요 특징:

  1. 캡슐화(Encapsulation): 데이터(속성)와 그 데이터를 처리하는 함수(메서드)를 하나의 단위, 즉 객체로 묶는 것입니다. 이를 통해 데이터의 안정성을 높이고 외부에서의 무분별한 접근을 제한합니다.
  2. 상속(Inheritance): 한 클래스가 다른 클래스의 속성이나 메서드를 상속받아 사용할 수 있게 하는 것입니다. 코드의 재사용성을 높이고 유지보수를 용이하게 합니다.
  3. 다형성(Polymorphism): 하나의 객체가 여러 가지 타입을 가질 수 있음을 의미합니다. 같은 인터페이스나 부모 클래스를 상속하는 여러 객체들이 같은 메시지에 대해 각기 다른 방식으로 반응할 수 있습니다.
  4. 추상화(Abstraction): 복잡한 실제 세계를 단순화시키는 과정으로, 중요한 부분에만 초점을 맞추고 나머지 부분은 간소화시키는 것입니다. 이를 통해 프로그램의 복잡도를 관리할 수 있습니다.

활용 방법:

  • 소프트웨어 재사용성 향상: 객체지향 개념을 사용하여 개발된 소프트웨어 컴포넌트는 재사용성이 높아져, 개발 시간과 비용을 절약하고, 소프트웨어의 품질을 향상시킬 수 있습니다.
  • 유지보수성 증가: 객체지향 프로그래밍은 코드의 수정이 필요할 때 해당 객체만 수정하면 되므로, 전체 코드의 구조를 변경하지 않아도 되어 유지보수가 용이합니다.
  • 개발 프로세스의 효율성: 객체지향 방법론은 개발 과정을 체계화하고, 팀 작업을 보다 효율적으로 만들어 줍니다. 다양한 객체들을 독립적으로 개발한 후 이를 조합하여 전체 시스템을 구축할 수 있습니다.
  • 유연성과 확장성: 새로운 기능이 필요할 때 존재하는 클래스를 확장(상속)하여 새로운 클래스를 만들 수 있으므로, 시스템의 유연성과 확장성이 높아집니다.

객체지향 프로그래밍은 소프트웨어 개발에서 널리 사용되며, Java, C++, Python, Ruby 등 다양한 프로그래밍 언어가 객체지향 패러다임을 지원합니다. 객체지향 방법론을 통해 개발자는 보다 직관적이고 유연한 방식으로 문제를 해결할 수 있으며, 소프트웨어의 품질과 생

[1] velog - 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요? (https://velog.io/@coco_116/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%99%9C%EC%9A%A9%ED%95%A0-%EC%88%98-%EC%9E%88%EB%82%98%EC%9A%94)
[2] 코드스테이츠 - 객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성 ... (https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95)
[3] 나무위키 - 객체 지향 프로그래밍 (https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)
[4] 얄코 - 객체지향 프로그래밍이 뭔가요? (https://www.yalco.kr/16_oodp/)

20. 클래스형과 함수형의 차이를 설명해주세요. 어떤 방식을 주로 사용하였고 그 이유가 뭔지 답변해주세요.

자바스크립트 내에서의 함수형과 클래스형의 차이점을 이해하기 위해서는, 우선 자바스크립트가 프로토타입 기반 언어라는 것을 기억해야 합니다. 이는 클래스 기반 객체지향 언어와 다른 점으로, 자바스크립트에서 "클래스"는 ES6에서 도입된 문법적 설탕(Syntactic Sugar)이라고 볼 수 있습니다. 즉, 자바스크립트의 클래스도 내부적으로는 프로토타입 기반으로 동작합니다.

함수형(Functional)

함수형 프로그래밍에서는 순수 함수(pure functions)와 불변성(immutability)을 중시합니다. 자바스크립트에서 함수형 프로그래밍을 할 때는 함수를 일급 객체(first-class citizens)로 취급하며, 고차 함수(higher-order functions), 클로저(closures), 순수 함수 등의 개념을 활용합니다.

  • 일급 객체로서의 함수: 자바스크립트에서 함수는 변수에 할당될 수 있고, 다른 함수의 인자로 전달되거나 반환될 수 있는 등, 일급 객체(first-class citizens)로 취급됩니다.
  • 고차 함수: 다른 함수를 인자로 받거나 함수를 반환하는 함수를 말합니다. 이는 함수형 프로그래밍의 핵심적인 부분입니다.
  • 클로저: 함수와 그 함수가 선언된 렉시컬 환경의 조합입니다. 클로저를 이용해 데이터를 숨기고, 상태를 안전하게 유지할 수 있습니다.

클래스형(Class-based)

클래스형 프로그래밍은 객체지향 프로그래밍(OOP)의 한 방식으로, 데이터와 그 데이터를 조작하는 메서드를 하나의 단위인 "클래스"로 묶습니다. ES6에서 도입된 클래스 문법을 통해 보다 명시적으로 객체지향 프로그래밍을 할 수 있게 되었습니다.

  • 클래스 선언: class 키워드를 사용해 클래스를 선언합니다. 클래스 내부에서는 생성자(constructor), 메서드, 속성을 정의할 수 있습니다.
  • 상속: extends 키워드를 사용해 클래스 간의 상속을 구현할 수 있습니다. 이를 통해 코드 재사용성을 높이고, 관계를 명확히 할 수 있습니다.
  • 인스턴스 생성: new 키워드를 사용해 클래스의 인스턴스를 생성합니다. 이 인스턴스를 통해 클래스에 정의된 속성과 메서드에 접근할 수 있습니다.

결론

자바스크립트에서 함수형과 클래스형의 가장 큰 차이는 설계 철학과 사용 방법에 있습니다. 함수형 프로그래밍은 함수의 조합과 데이터의 불변성에 중점을 두는 반면, 클래스형 프로그래밍은 객체의 상태와 행동을 클래스로 묶어 관리하는 객체지향적 접근을 제공합니다. 선택은 프로젝트의 요구사항, 개발 팀의 선호도, 그리고 특정 문제를 해결하기 위한 가장 적합한 패러다임에 따라 달라질 수 있습니다.

[1] velog - 함수형 프로그래밍과 클래스형 프로그래밍 (https://velog.io/@tjdud0123/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EA%B3%BC-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)
[2] velog - 함수형 프로그래밍 - 함수형 vs 객체지향형 (https://velog.io/@doodream/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%95%A8%EC%88%98%ED%98%95-vs-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%ED%98%95)
[3] YouTube - 함수형프로그래밍이 대세다?! (함수형 vs 객체지향) - YouTube (https://www.youtube.com/watch?v=4ezXhCuT2mw)
[4] 요즘IT - '액션-계산-데이터' 관점으로 보는 함수형 프로그래밍 패러다임 (https://yozm.wishket.com/magazine/detail/1485/)

profile
황세민

0개의 댓글

관련 채용 정보