ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 기술면접 - 2
    개발 면접/자바 2024. 11. 7. 09:12

    String literal과 new String(””)의 차이를 설명해 주세요.

    • String Literal (String str = “hello”)
      • String Pool 영역에 저장한다.
      • 문자열 재사용
      • 메모리 효율적
    • new String (String str = new String(”hello”))
      • Heap 메모리에 저장
      • 항상 새로운 객체 생성
      • 메모리 사용량 증가

    String, StringBuilder, StringBuffer의 차이점에 대해서 설명해주세요.

    • String
      • 불변객체
        • 객체 생성 이후, 재할당(재참조)는 가능하지만, 한번 할당되면 내부 데이터를 변경할 수 없는 객체
      • 문자열 연산시에 새로운 객체가 생성된다.
      • 불변객체이기 때문에 멀티스레드 환경에서 동일한 데이터를 보장받을 수 있다.
    • StringBuilder
      • 가변객체
      • 문자열 연산시 기존 객체를 수정
      • 기존 객체를 수정하다보니, 멀티스레드 환경에서 동일한 데이터를 보장받기 어렵다.
    • StringBuffer
      • String과 StringBuilder의 장점과 단점을 개선한 객체
      • 가변객체이며, 문자열 연산시 기존 객체를 수정한다.
      • 동기화를 지원하기 때문에 멀티스레드 환경에서 동일한 데이터를 보장받을 수 있다.
    • 불편객체를 왜 사용할까? → 관련되서 방어적 복사라는 단어가 나오는데 조금 더 공부해야한다.
      • Thread-Safe과 동시에 동기화를 고려하지 않아도 된다.

    Exception과 Error의 차이는 무엇인가요?

    • Exception
      • 프로그램 실행 중 발생하는 예외적인 상황이므로, 적절한 처리가 가능한 문제 (복구 가능한 문제를 의미)
    • Error
      • 시스템 레벨에서 발생하는 문제로, 프로그램이 복구할 수 없는 문제 (OutOfMemoryError, StackOverflowError)

    Exception 클래스의 예시를 말해주세요.

    • Checked Exception
      • IOException, FileNotFoundException
    • Unchecked Exception(Runtime Exception)
      • NullPointException, ClassCastException, IllegalArgumentException

    Checked Exception과 Unchecked Exception의 차이는 무엇인가요?

    • Checked Exception
      • 컴파일 시점에 체크
      • 예외 처리 시 구체적인 예외 타입을 사용
    • Unchecked Exception
      • 런타임 시점에 체크
      • 예외 발생 시 어떤 처리를 할 것인지 선택적으로 사용 가능

    throw와 throws의 차이는 무엇인가요?

    • throw
      • 예외를 직접 발생시키는 키워드
      • 메소드 내부에서 사용한다.
    • throws
      • 예외 처리를 위임 시키는 키워드 (자신을 호출한 곳에 짬처리)
      • throws할 때, 이를 호출하는 곳에서는 명시적으로 처리해줘야한다.

    try~catch~finally 구문에서 finally은 어떠한 역할을 하나요?

    • 예외 발생 여부와 관계없이 항상 실행되는 코드 블록
      • 주로 리소스 해제나 정리 작업에 사용

    Throwable과 Exception의 차이는 무엇인가요?

    • Throwable
      • 모든 예외(Exception)와 에러(Error)의 최상위 클래스
      • 시스템 에러와 예외를 모두 포함
      • 직접 사용하는 경우는 많이 있지 않다.
    • Exception
      • Throwable의 하위 클래스
      • 프로그램에서 처리 가능한 예외를 나타낸다.
      • 실제로는 우리가 예외를 처리할 때 주로 사용한다.
    • Exception을 더 자주 사용하는 이유는 프로그램을 개발하면서 어떤 예외가 발생했는지 클래스 이름만 보고도 직관적으로 이해하기 위함이라고 생각한다. 만약 Throwable로 모든 예외를 작성한다고 했을 때, 구체적으로 어떤 예외가 발생했는지에 대해 더 많은 시간을 투자해야한다.

    제네릭이란 무엇이고, 왜 사용할까요?

    • 클래스나 메소드에서 사용할 데이터 타입을 컴파일 시점에 미리 지정하는 방법입니다.
      • 타입 안정성이 보장된다.
      • 코드의 재사용성이 뛰어나다.
      • 불필요한 타입 캐스팅이 제거된다
    // 제네릭 클래스 
    public class Box<T> { 
    	private T content; 
        
        public void set(T content) { 
        	this.content = content; 
        } 
        
        public T get() { 
        	return content; 
        } 
    } 
    
    // 다양한 타입으로 재사용 
    Box<Integer> intBox = new Box<>(); 
    Box<String> strBox = new Box<>(); 
    Box<User> userBox = new Box<>();

    제네릭을 사용한 경험을 소개해 주세요.

    • 컬렉편 프레임워크를 사용할 때, 타입 안정성을 보장받은 경험이 있습니다. 이는 컴파일 시점에 타입 오류를 발견해주고 런타임시 발생할 수 있는 오류를 방지해줄 수 있습니다.
    • 또한 가독성이 향상되었던 경험이 있습니다. 코드의 의도가 명확하게 표현되기 때문에 어떤 데이터 타입을 넣어야하는지 명시적으로 확인할 수 있었고, 이후 유지보수시 어떤 데이터를 처리하는지 쉽게 파악할 수 있었습니다.

    람다란 무엇인가요?

    • 익명함수이다.
    • 자바에서는 함수형 인터페이스(@Functional Interface)가 익명함수로 사용될 수 있다.
    • 이때, 함수형 인터페이스에는 구현해야 할 추상 메소드가 반드시 하나만 정의되어 있는 인터페이스를 말한다.

    스트림이란 무엇인가요?

    • 연속된 데이터를 처리하는 함수
    • 람다와 스트림은 왜 생겨났을까요?
      • 함수형 프로그래밍의 장점
      • 가독성
      • 사이드 이펙트 최소화
      • 불변성
      • 성능 최적화 등등,,

    자바에서 어노테이션이란 무엇일까요?

    • 메타데이터를 제공하는 형태로 코드에 추가적인 정보를 제공
    • 주로 클래스, 메소드, 변수에 붙여 컴파일러나 런타임에서 특정 동작을 유발하거나 정보를 전달하는데 사용

    어노테이션을 왜 사용할까요?

    • 코드 간결화와 가독성 향성
      • ex) JPA에서 @Entity 어노테이션 사용
      • 별도의 코드 작성 없이 엔티티로 정의할 수 있고, 해당 클래스는 엔티티라는 것을 명시적으로 알려준다.
    • 컴파일러에게 추가 정보 제공
      • @Override 어노테이션을 통해 메소드가 올바르게 오버라이드 되었는지 컴파일러가 검사할 수 있게 된다.
    • 런타임 동작 제어
      • 런타임시 어노테이션을 읽어서 특정 기능을 실행할 수 있다. 예를 들어 Spring에서 @Autowired를 통해 의존성을 주입하고, @Transactional를 통해 트랜잭션을 관리한다.

    어노테이션은 리플렉션으로 동작한다고 말씀해 주셨는데, 리플렉션은 무엇인가요?

    • 런타임 시점에 클래스, 메소드, 필드 등의 정보를 동적으로 조회하고 조작할 수 있는 기능입니다.

    그러면 리플렉션을 활용해서 어노테이션의 메타 데이터를 가져오는 등의 로직을 실제로 구현해 보신 적이 있으신가요?

    • 제가 직접 구현해본 경험은 없지만, 리플렉션을 통해 어노테이션의 메타데이터를 가져오는 로직이 흥미로운 주제라 실제로 이 기술을 적용해보고 싶어 개인 프로젝트에서 간단한 어노테이션 기반의 설정 시스템을 만들어보려 합니다. 구체적으로, 특정 로깅 로직을 동적으로 삽입하는 기능을 리플렉션으로 구현해보려 하고 있으며, 이를 통해 실무에 필요한 감각을 키우고자 합니다

     System.out.println 클래스는 성능이 좋지 않다고 하는데 이유가 무엇일까요?

    • 성능 이슈
      • System.out.println이 끝날때까지 아무 일을 실행할 수 없고 대기해야한다
    • 로그 관리 어려움
      • 로그 레벨을 지정할 수 없어서 어떤 로그인지 확인하기가 어렵다.
      • 또한 하드 코딩으로 로그가 작성되어 있는 경우 유지보수성이 굉장히 떨어진다.

    '개발 면접 > 자바' 카테고리의 다른 글

    자바 기술면접 - 1  (2) 2024.10.31
Designed by Tistory.