본문 바로가기
개발 공부 일지/CS

면접질문 (24/9/5)

by yelimu 2024. 9. 4.

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

: 추상화, 캡슐화, 상속성, 다형성

이 네 가지 특징은 객체 지향 언어에서 프로그램을 보다 유연하고, 재사용 가능하며, 유지 보수하기 쉽게 만드는 데 중요한 역할을 합니다. 

 

1. 추상화 (Abstraction)

추상화는 복잡한 시스템에서 중요한 부분만을 드러내고, 불필요한 세부 사항은 숨기는 개념입니다. 이를 통해 사용자는 복잡한 내부 구현을 알 필요 없이, 간단하고 직관적인 인터페이스만으로 시스템을 사용할 수 있습니다. 추상화를 통해 시스템의 복잡성을 줄이고, 사용성과 이해도를 높일 수 있습니다.

  • 예시: 자동차를 운전할 때, 운전자는 가속 페달을 밟아 속도를 높일 수 있습니다. 이때 가속 페달을 밟는 행위는 간단하지만, 그 뒤에 엔진이 연료를 공급받아 동작하는 복잡한 과정은 운전자가 알 필요 없이 추상화되어 있습니다.

2. 캡슐화 (Encapsulation)

캡슐화는 객체의 데이터와 그 데이터를 처리하는 메서드를 하나로 묶어 외부로부터 보호하는 개념입니다. 캡슐화를 통해 객체의 내부 상태가 외부로부터 직접 접근하거나 변경되지 않도록 하고, 객체의 무결성을 유지할 수 있습니다. 이를 통해 클래스의 내부 구현이 변경되더라도 외부에 미치는 영향을 최소화할 수 있습니다.

  • 예시: 은행 계좌 시스템에서, 계좌의 잔액은 외부에서 직접 변경할 수 없도록 보호됩니다. 계좌의 잔액을 변경하려면 입금이나 출금과 같은 메서드를 사용해야 합니다. 이렇게 중요한 데이터가 보호되는 것이 캡슐화의 대표적인 예입니다.

3. 상속성 (Inheritance)

상속성은 기존의 클래스를 바탕으로 새로운 클래스를 생성하는 개념입니다. 새로운 클래스는 기존 클래스의 속성과 메서드를 물려받아 사용할 수 있으며, 필요에 따라 추가로 확장하거나 수정할 수 있습니다. 상속성을 통해 코드의 재사용성을 높이고, 계층 구조를 통해 관련된 클래스들을 그룹화할 수 있습니다.

  • 예시: 동물(Animal)이라는 클래스를 만들고, 이를 상속받아 개(Dog)나 고양이(Cat)와 같은 세부적인 클래스를 만들 수 있습니다. 이때 개와 고양이는 동물의 기본적인 특성(예: 움직인다, 먹는다)을 그대로 물려받고, 자신만의 특성을 추가할 수 있습니다.

4. 다형성 (Polymorphism)

다형성은 동일한 메서드나 연산자가 서로 다른 객체에서 다르게 동작할 수 있게 하는 개념입니다. 다형성을 통해 동일한 인터페이스를 사용하지만, 객체에 따라 서로 다른 동작을 수행할 수 있어, 코드의 유연성과 확장성이 높아집니다.

  • 예시: "날아라"라는 명령이 새(Bird)에게는 날개를 사용해 하늘을 나는 행동을 의미하지만, 비행기(Airplane)에게는 엔진을 사용해 날아오르는 행동을 의미할 수 있습니다. 이렇게 동일한 명령이 객체에 따라 다르게 동작하는 것이 다형성입니다.

 

오버로딩 : 하나의 메소드를 매개변수의 타입, 개수, 순서에 따라 다른 기능을 하도록 하므로 다형성의 특징을 띤다 

오버라이딩 : 부모로부터 상속받은 메서드를 재정의하여 사용하므로 상속성, 다형성의 특징을 띤다

 


운영체제의 구조와 역할

운영체제의 역할

운영체제는 사용자가 컴퓨터를 사용하기 위해 필요한 소프트웨어이다.

운영체제는 컴퓨터 시스템의 자원을 효율적으로 관리하고, 사용자와 응용 프로그램이 하드웨어를 쉽게 사용할 수 있도록 지원하는 중재자 역할을 합니다. 주요 역할은 다음과 같습니다:

  1. 프로세스 관리: 실행 중인 프로그램들을 관리하며, CPU 스케줄링, 프로세스 생성/종료, 동기화 등을 처리합니다.
  2. 메모리 관리: 메모리의 할당과 해제를 관리하여, 프로그램들이 안정적으로 실행되도록 지원합니다.
  3. 파일 시스템 관리: 파일 저장, 검색, 권한 설정 등을 담당하여, 데이터를 효율적으로 관리합니다.
  4. 입출력 관리: 다양한 입출력 장치와의 상호작용을 관리하여, 사용자와 장치 간의 데이터 교환을 원활하게 합니다.
  5. 사용자 인터페이스 제공: 사용자에게 명령어 인터페이스(명령 줄)나 그래픽 사용자 인터페이스(GUI)를 제공하여 시스템과 상호작용할 수 있게 합니다.

운영체제의 구조

커널(Kernel)

첫번째로 가장 중요한 것은 커널이다. 커널은 용어 자체도 '핵심의' 같은 의미이다. 운영체제 커널이라고 하면, 전반적인 프로세스를 뜻한다.(프로세스는 아래에서 설명하겠다. 지금은 프로그램이라고 생각하면 된다.) 프로세스 관리, 메모리 관리, 저장공간 관리, 연결된 장치 관리 등 컴퓨터에 속한 모든 자원을 관리하는 역할을 한다. 

 

인터페이스(Interface)

인터페이스는 사용자의 명령을 컴퓨터에 전달하고 결과를 사용자에게 알려주는 소통의 역할을 한다. 인터페이스는 대표적으로 2가지 종류가 있다. GUI(Graphical User Interface)와 CLI(Command Line Interface)다. GUI는 윈도우 바탕화면처럼 아이콘과 마우스 클릭이 되게끔 만들어져서 사용자 편의성을 가진 인터페이스다. CLI는 터미널로 연결하면, 마우스가 없고 명령어를 키보드로 입력하면 글씨만 나오는 인터페이스다.(ex. MS-DOS). 

 

시스템 콜(System Call)

시스템 콜은 사용자나 프로그램이 직접적으로 컴퓨터 자원에 접근하는 것을 막고 커널을 보호하기 위해서 만든 코드 집합이다. 시스템 콜 함수를 통해 커널에 접근할 수 있다. 커널이라는 굉장히 중요한 여러가지 코드나 중요한 내용이 있는데, 그걸 아무나 접근할 수 있게 만들면, 중요한 걸 누가 바꾸거나 할 수 있게 때문에 운영체제는 시스템 콜을 통해서만 호출할 수 있게 디자인 되어있다.

 

드라이버(Driver)

드라이버는 프린터, 키보드 및 디스크 드라이브와 같은 하드웨어 장치와 운영체제 간의 통신을 가능하게 하는 소프트웨어이다. 몇년 전만해도 컴퓨터에 새로운 기기를 연결하기 위해 드라이버를 설치했어야했던 걸 알고있다면, 이해하기 쉽다. 프린터라고 하는 기계는 컴퓨터가 일반적으로 이해하는 구조랑 좀 다르게 생겼다. 특수한 목적을 가지고 있는 하드웨어이기 떄문이다. 그래서 드라이버를 설치함으로써 그 디바이스와 소통을 할 수 있게 만들어주는 것이다.

 

 

운영체제를 통해 안정적이고, 효율적인 동작을 하기 위해서는 사용자 또는 응용프로그램이 직접 하드웨어에 접근하는 것을 막아야 한다. 이 때문에 User Mode(CPU 명령어 사용을 제한)와 Kernel Mode(CPU 명령어를 사용해 하드웨어를 직접 제어)로 분리해 운영체제를 사용하게 된다. 그리고 User Mode와 Kernel Mode 사이는 시스템 콜(System Call)을 통해서 전환된다.

 

출처: https://coduking.tistory.com/entry/운영체제OS란-개념과-구조커널-시스템콜-등 [코딩에듀킹:티스토리]


데이터베이스의 종류

데이터베이스는 데이터를 저장, 관리, 검색하는 시스템으로, 크게 관계형 데이터베이스비관계형 데이터베이스로 구분됩니다.

1. 관계형 데이터베이스 (RDBMS, Relational Database Management System)

  • 구조: 데이터를 테이블 형태로 저장하며, 테이블 간의 관계를 정의합니다. 각 테이블은 행과 열로 구성되며, 행은 데이터 레코드, 열은 데이터 속성을 나타냅니다.
  • 예시: MySQL, PostgreSQL, Oracle, SQL Server
  • 특징:
    • 고정된 스키마: 데이터 구조가 고정되어 있으며, 데이터 간의 관계를 명확하게 정의합니다.
    • SQL 사용: 데이터를 관리하기 위해 구조적 쿼리 언어(SQL)을 사용합니다.
    • ACID 속성: 트랜잭션의 일관성과 안정성을 보장하는 ACID(Atomicity, Consistency, Isolation, Durability) 속성을 지원합니다.

2. 비관계형 데이터베이스 (NoSQL, Not Only SQL)

  • 구조: 테이블 기반이 아닌 다양한 데이터 모델(문서, 키-값, 그래프, 열 기반)을 사용하여 데이터를 저장합니다.
  • 예시: MongoDB, Cassandra, Redis, Neo4j
  • 특징:
    • 유연한 스키마: 데이터 구조가 유연하며, 변경이 잦은 데이터나 비정형 데이터를 처리하는 데 적합합니다.
    • 다양한 데이터 모델: 문서 지향, 키-값, 그래프, 컬럼 패밀리 등 다양한 데이터 모델을 지원합니다.
    • 확장성: 대규모 데이터를 처리할 수 있는 수평적 확장성에 강점을 가집니다.

관계형 데이터베이스는 데이터의 일관성과 복잡한 쿼리 처리가 중요한 경우에 적합하며, 비관계형 데이터베이스는 대규모 데이터 처리와 유연한 데이터 구조가 필요한 상황에 적합합니다.