[코비] 11월 4주차 웹 개발자 면접 예상질문 - Java

최정윤·2023년 11월 20일
0

코비

목록 보기
32/38

💡 오버라이딩(Overriding)과 오버로딩(Overloading)에 대해 설명해주세요.

오버라이딩(Overriding)은 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것을 말하고,
오버로딩(Overloading)은 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것을 말합니다.

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

우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 상태와 행위를 가진 객체를 만들고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다.즉, 기능이 아닌 객체가 중심이며 "누가 어떤 일을 할 것인가?"가 핵심특징으로는 캡슐화, 상속, 다형성, 추상화 등이 있고, 모듈 재사용으로 확장 및 유지보수가 용이합니다.

💡 try-with-resources에 대해 설명해주세요.

try-with-resources는 try-catch-finally의 문제점을 보완하기 위해 나온 개념입니다.
try( ... ) 안에 자원 객체를 전달하면, try블록이 끝나고 자동으로 자원 해제 해주는 기능을 말합니다.
따로 finally 구문이나 모든 catch 구문에 종료 처리를 하지 않아도 되는 장점이 있습니다.
try-with-resources 알아보기

💡 불변 객체가 무엇인지 설명하고 대표적인 Java의 예시를 설명해주세요.

불변 객체는 객체 생성 이후 내부의 상태가 변하지 않는 객체를 말합니다.
Java에서는 필드가 원시 타입인 경우 final 키워드를 사용해 불변 객체를 만들 수 있고,
참조 타입일 경우엔 추가적인 작업이 필요합니다.

▶️ 참조 타입일 경우 추가적인 작업은 어떤게 있는지 설명해주세요.

참조 타입은 대표적으로 1.객체를 참조할 수도 있고, 2.배열이나 3.List 등을 참조할 수 있습니다.

  1. 참조 변수가 일반 객체인 경우 객체를 사용하는 필드의 참조 변수도 불변 객체로 변경해야 합니다.

  2. 배열일 경우 배열을 받아 copy해서 저장하고, getter를 clone으로 반환하도록 하면 됩니다.
    (배열을 그대로 참조하거나, 반환할 경우 외부에서 내부 값을 변경할 수 있음. 때문에 clone을 반환해 외부에서 값 변경하지 못하게 함)

  3. 리스트인 경우에도 배열과 마찬가지로 생성시 새로운 List를 만들어 값을 복사하도록 해야 합니다.
    배열과 리스트는 내부를 복사하여 전달하는데, 이를 방어적 복사(defensive-copy)라고 합니다.

▶️ 불변 객체나 final을 굳이 사용해야 하는 이유가 있을까요?

불변 객체나 final 키워드를 사용해 얻는 이점은 다음과 같습니다.

  1. Thread-Safe하여 병렬 프로그래밍에 유용하며, 동기화를 고려하지 않아도 된다.
    (공유 자원이 불변이기 때문에 항상 동일한 값을 반환하기 때문)

  2. 실패 원자적인 메소드를 만들 수 있다.
    (어떠한 예외가 발생되더라도 메소드 호출 전의 상태를 유지할 수 있어 예외 발생 전과 똑같은 상태로 다음 로직 처리 가능)

  3. 부수효과를 피해 오류를 최소화 할 수 있다.
    ※ 부수효과 : 변수의 값이 바뀌거나 객체의 필드 값을 설정하거나 예외나 오류가 발생하여 실행이 중단되는 현상

  4. 메소드 호출 시 파라미터 값이 변하지 않는다는 것을 보장할 수 있다.

  5. 가비지 컬렉션 성능을 높일 수 있다.
    (가비지 컬렉터가 스캔하는 객체의 수가 줄기 때문에 Gc 수행 시 지연시간도 줄어든다.)

[참고링크]

profile
개발 기록장

0개의 댓글