[Section 1] 기술 면접 준비

JEREGIM·2023년 3월 13일
0

📌자바 객체지향 프로그래밍(OOP)에 대해 설명해주세요.

자바 객체지향 프로그래밍은 프로그램을 객체라는 단위로 나누고 이들 객체 간의 상호작용으로 프로그램을 구성하는 방식입니다. 객체는 데이터와 데이터를 다루는 메서드로 이루어져 있으며 이러한 객체들은 클래스라는 틀을 이용하여 생성됩니다.

객체지향 프로그래밍은 캡슐화, 상속, 추상화, 다형성 등의 개념을 기반으로 하며, 이를 통해 프로그램의 유지보수와 확장을 용이하게 만들고 코드의 가독성과 재사용성을 높일 수 있습니다.

  • 캡슐화는 객체의 데이터와 메서드를 하나로 묶고, 외부에서 직접 접근하지 못하도록 정보를 은닉하는 것을 의미합니다. 객체의 내부 구현 세부사항을 숨김으로써, 객체 간의 결합도가 느슨해지고 코드의 변화와 확장에 용이해집니다.

  • 상속은 상위 클래스(부모 클래스)의 특성을 하위 클래스(자식 클래스)가 물려받아 사용할 수 있도록 하는 것을 의미합니다. 상속을 통해 클래스 간의 관계를 형성하고, 하위 클래스는 상위 클래스의 모든 멤버를 물려받기 때문에 코드의 재사용성을 높일 수 있습니다.

  • 추상화는 객체의 복잡한 세부사항을 숨기고, 핵심적인 부분만을 표현하는 것을 의미합니다. 즉, 여러 클래스들의 공통되는 부분을 뽑아내서 추상 클래스 혹은 인터페이스로 만드는 것입니다. 이를 통해, 구체적인 구현에 의지하는 것이 아닌 추상적인 역할에 의지할 수 있게 되고 코드의 중복이 줄어들고 코드의 가독성이 향상됩니다.

  • 다형성은 하나의 객체가 여러가지 형태를 가질 수 있는 것을 의미합니다. 즉, 상위타입의 참조변수로 타입의 객체를 다룰 수 있습니다. 예를 들어, 참조형 매개변수를 가진 메서드를 호출할 때, 하위타입의 인스턴스를 넘겨줄 수 있고 상위타입의 배열에 하위타입의 객체를 담을 수 있습니다. 이를 통해, 코드의 유연성과 확장성이 높아집니다.

📌OOP의 장점과 단점에 대해 설명해주세요.

OOP의 장점에는 여러가지가 있습니다.

  • 상속을 통해 기존의 클래스를 확장하고, 추상화를 통해 공통적인 부분을 추출하여 코드의 재사용성을 높일 수 있습니다.

  • 캡슐화를 통해 내부 구현 세부사항을 외부로부터 숨기고, 필요한 부분만 드러냄으로써 외부에서의 예측하지 못한 상태 변경에 대한 영향을 최소화할 수 있습니다. 이로 인해 코드의 안정성과 보안성이 향상되고, 객체 간의 결합도가 낮아져 코드의 유지보수가 쉬워집니다.

  • 다형성을 통해 상위타입의 참조변수로 하위타입의 여러 객체를 다룰 수 있고, 상속을 통해 확장이 쉬워지므로, 코드의 유연성이 높아집니다.

  • 추상화를 통해 객체의 복잡한 세부사항을 숨기고 공통적인 부분만을 모아 표현하기 때문에 코드의 가독성이 높아집니다.

단점은 실행 속도가 상대적으로 느리다는 것입니다. 객체를 많이 만들어 놓으니 절차지향언어에 비해 실행 속도가 상대적으로 느리다고 합니다. 또한 설계시 많은 시간과 노력이 필요하다는 것도 단점 중 하나입니다.

📌추상 클래스와 인터페이스의 차이는 무엇인가요?

추상 클래스는 추상 메서드를 포함하고 있는 클래스를 말하고 인터페이스는 추상 메서드로만 이루어져 있는 것을 말합니다.
추상 클래스는 일바 클래스처럼 인스턴스 변수, 인스턴스 메서드, 생성자 등을 가질 수 있지만 인터페이스는 위의 것들을 가질 수 없습니다.
추상 클래스는 다중상속이 불가능하지만, 인터페이스는 다중상속이 가능합니다.

📌컬렉션과 스트림의 차이에 대해서 설명해주세요.

  1. 데이터를 다루는 목적이 다릅니다.
    컬렉션은 데이터를 저장하고 조회하는 것이 목적입니다. 예를 들어, List를 순회하며 요소를 삭제하거나 추가할 수 있습니다.
    스트림은 데이터를 처리하는 것이 목적입니다. 스트림을 사용하면 데이터를 필터링, 매핑, 정렬 등의 다양한 작업을 수행할 수 있습니다.

  2. 데이터를 반복 처리하는 방식이 다릅니다.
    컬렉션은 명시적인 for-each 루프나 iterator 반복자를 사용하여 데이터를 외부 반복을 통해 처리합니다.
    스트림은 내부 반복을 사용하여 데이터를 처리합니다. 스트림은 내부적으로 for-each 루프를 사용하지만 개발자가 이를 직접 구현할 필요가 없습니다.

  3. 다루는 데이터 소스의 유형이 다릅니다.
    컬렉션은 메모리에 저장된 데이터를 처리합니다. 즉, 모든 데이터가 메모리에 로드되어 있으므로 데이터를 쉽게 검색하고 수정할 수 있습니다.
    스트림은 컬렉션, 배열, 파일 등 다양한 데이터 소스를 처리할 수 있습니다. 스트림은 데이터를 순차적으로 읽어 들이는 방식으로 처리되므로, 전체 데이터를 한 번에 로드하지 않아도 됩니다. 이러한 특성은 대용량의 데이터를 처리할 때 유용합니다.

0개의 댓글