study/CS

CS 면접 예상 질문 - Java(3)

으녕오리 2025. 3. 4. 00:33

Java의 직렬화와 역직렬화에 대해 설명해주세요.

더보기

-> 직렬화는 객체를 바이트 형태로 변환하여 저장하거나 네트워크로 전송할 수 있게 만드는 과정이고,
역직렬화는 바이트 데이터를 다시 객체로 변환하는 과정입니다. 

  • 직렬화가 필요한 이유는 무엇인가요?
    -> 객체를 저장하거나 네트워크를 통해 전송하기 위해 필요합니다.
  • Java에서 직렬화와 역직렬화를 어떻게 구현하나요?
    -> ObjectOutputStream과 ObjectInputStream을 사용하여 구현합니다.
  • 직렬화를 위해 어떤 인터페이스를 구현해야 하나요?
    -> Serializable 인터페이스를 구현해야 합니다.
  • 직렬화에서 transient 키워드는 어떤 역할을 하나요?
    -> transient 키워드를 붙인 필드는 직렬화에서 제외됩니다.
  • 역직렬화 시 예외가 발생할 수 있는 이유는 무엇인가요?
    -> 클래스 버전이 달라서 InvalidClassException이 발생할 수 있습니다.

 

객체지향의 설계원칙에 대해 설명해주세요.

더보기

-> 객체지향 설계 원칙에는 SOLID 원칙이 있습니다.
단일 책임 원칙(S), 개방-폐쇄 원칙(O), 리스코프 치환 원칙(L), 인터페이스 분리 원칙(I), 의존 역전 원칙(D)로 구성됩니다.

  • 단일 책임 원칙은 무엇인가요?
    -> 클래스는 하나의 책임만 가져야 한다는 원칙입니다.
  • 개방-폐쇄 원칙을 어떻게 이해할 수 있나요?
    -> 기존 코드를 수정하지 않고 확장할 수 있어야 한다는 원칙입니다.
  • 리스코프 치환 원칙이란 무엇인가요?
    -> 자식 클래스는 부모 클래스로 대체 가능해야 한다는 원칙입니다.
  • 인터페이스 분리 원칙은 어떤 의미인가요?
    -> 클라이언트는 사용하지 않는 메서드에 의존하지 않도록 해야 한다는 원칙입니다.
  • 의존 역전 원칙은 무엇인가요?
    -> 고수준 모듈이 저수준 모듈에 의존하지 않고, 추상화에 의존해야 한다는 원칙입니다.

 

Java의 접근 제한자에 대해 설명해주세요.

더보기

-> Java에서 접근 제한자는 private, default, protected, public이 있으며, 각각의 접근 범위가 다릅니다.

private는 클래스 내에서만, default는 같은 패키지 내에서만, protected는 같은 패키지와 자식 클래스에서, public은 어디서나 접근 가능합니다.

  • default 접근 제한자는 어떻게 사용할 수 있나요?
    -> 클래스에 명시적으로 접근 제한자를 지정하지 않으면 default가 적용됩니다.
  • protected 접근 제한자가 유용한 경우는 언제인가요?
    -> 같은 패키지 내에서는 접근 가능하고, 다른 패키지에서도 상속받은 경우 접근할 수 있어, 상속 관계에서 유용합니다.
  • 접근 제한자와 캡슐화는 어떤 관계가 있나요?
    -> 접근 제한자를 통해 외부에서 객체의 내부 데이터에 직접 접근하지 못하도록 제한하는 것이 캡슐화의 핵심 원칙입니다.
  • 서브클래스에서 부모 클래스의 protected 멤버를 오버라이딩할 때 접근 제한자를 변경할 수 있나요?
    -> 가능합니다. protected를 public으로 변경할 수 있지만, private으로 축소할 수는 없습니다.
  • protected 접근 제한자를 사용하면 외부 패키지에서도 접근할 수 있나요?
    -> 직접 접근은 불가능하지만, 해당 클래스를 상속받은 하위 클래스에서는 접근할 수 있습니다.

 

객체지향 프로그래밍의 특징에 대해 설명해주세요.

더보기

-> 객체지향 프로그래밍의 주요 특징은 캡슐화, 상속, 다형성, 추상화입니다.
즉, 데이터를 객체로 묶고, 클래스 상속을 통해 재사용하며, 다형성을 통해 유연하게 처리하고, 필요한 세부사항을 숨깁니다.

  • 캡슐화란 무엇인가요?
    -> 데이터를 보호하고, 외부에 필요한 메서드를 통해 접근하는 것입니다.
  • 상속을 이용하면 어떤 이점이 있나요?
    -> 코드 재사용이 가능하고, 계층적 관계를 형성할 수 있습니다.
  • 다형성은 무엇인가요?
    -> 같은 메서드 이름으로 다른 동작을 할 수 있는 기능입니다.
  • 추상화란 무엇인가요?
    -> 객체의 복잡한 구현을 숨기고 중요한 기능만 드러내는 것입니다.
  • 추상화와 캡슐화의 차이점은 무엇인가요?
    -> 추상화는 불필요한 정보를 숨기고 핵심 기능만 제공하는 것이고,
    캡슐화는 데이터와 메서드를 하나로 묶어 외부에서 직접 접근하지 못하도록 보호하는 것입니다.
  • 객체지향 설계에서 단일 책임 원칙(SRP)은 왜 중요한가요?
    -> 하나의 클래스가 하나의 책임만 가지도록 하여 코드의 유지보수성을 높이고, 변경이 용이하도록 만들기 위해 중요합니다.

 

CheckedException과 UnCheckedException의 차이를 설명해주세요.

더보기

-> CheckedException은 반드시 처리해야 하는 예외로, 코드에서 예외를 명시적으로 처리하거나 선언해야 합니다.
반면, UncheckedException은 실행 중 발생할 수 있으며, 명시적 처리가 필요 없습니다.

  • CheckedException은 반드시 처리해야 하는 이유가 무엇인가요?
    -> 컴파일 단계에서 예외 처리를 강제하여 프로그램이 예외 상황을 적절히 처리하도록 하기 위해서입니다.
  • CheckedException을 UnCheckedException처럼 사용할 수 있을까요?
    -> 가능하지만 좋은 방법은 아닙니다. RuntimeException을 상속받아 CheckedException을 감싸면 예외 처리를 강제하지 않을 수 있지만, 코드의 안정성이 떨어질 수 있습니다.
  • CheckedException과 UnCheckedException은 어떤 기준으로 나뉘나요?
    -> CheckedException은 컴파일러가 예외 처리를 강제하고, UnCheckedException은 그렇지 않습니다.
  • UnCheckedException을 너무 많이 사용하면 문제가 될까요?
    -> 네, 예외 처리를 강제하지 않기 때문에 코드 안정성이 떨어질 수 있습니다.
  • CheckedException을 강제로 발생시킬 수 있나요?
    -> 네, throw new IOException("강제 발생")처럼 throw 키워드를 사용하면 됩니다.