[JSCODE] 모의면접으로 학습하는 자바 1주차 - 기본 (9~18)

동춘·2024년 10월 31일

[면접스터디] 자바

목록 보기
2/15

자바 기본 1주차

9. 동일성과 동등성

  • 동일성 (Identity): 메모리 주소가 같은지 여부로, 같은 객체(instance)를 참조하는지 확인합니다.
  • 동등성 (Equality): 객체의 값이 같은지 비교합니다. equals() 메서드로 주로 비교합니다.

10. equals()와 ==의 차이점

  • equals() 메서드는 객체의 값을 비교하여 동등성을 확인합니다.
  • == 연산자는 객체의 메모리 주소를 비교하여 동일성을 확인합니다.

    객체(주소)가 동일한지, 값은 동등한지 ?

11. HashCode와 equals()의 차이점

  • HashCode: 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체 마다 다른 값을 가지고 있습니다. 주로 해시 기반 컬렉션에서 객체를 빠르게 찾기 위해 사용됩니다. 해시코드가 다르면 다른 객체로 판단합니다.

    두 객체가 equals()로 같다면 hashCode()도 동일한 값을 반환해야 합니다. 그렇지 않으면 해시 컬렉션에서의 일관성이 깨질 수 있습니다. (해쉬충돌 발생)
    하지만 hashcode 범위가 32비트 정수로 제한되어있기 때문에 다른 객체여도 같은 hash 값이 나올 수 있습니다.
    그럴 경우 equals로 한번 더 검증을 하여 해결이 가능합니다.

12. equals()와 hashCode()를 모두 재정의하는 이유

  • hashCode()를 재정의 하면 동등한 객체가 동일한 해시 코드를 반환하여 효율적인 검색이 가능합니다.
  • equals()도 함께 재정의해야 해시 기반 컬렉션에서 객체의 검색과 저장이 일관성을 지킬 수 있습니다.

    논리적으로 동일한 객체는 동일한 메모리 주소를 갖는다면 -> 동일한 객체는 동일한 해시코드를 가지고 -> equals()와 hashCode()의 재정의를 통해 일관성을 보장합니다.

13. toString() 메서드

  • 객체를 문자열로 표현하여 출력할 때 사용합니다. 기본적으로 클래스 이름과 해시코드를 반환하지만, 객체의 정보를 출력하기 위해 재정의할 수 있습니다.

14. 메인 메서드가 static인 이유

  • 프로그램 시작 시 객체를 생성하지 않고 바로 실행되기 위해 static으로 선언됩니다.

15. 상수(Constant)와 리터럴(Literal)

  • 상수 : 변하지 않는 값(변수)을 의미하며, final 키워드로 선언합니다.
  • 리터럴 : 코드 내에서 값을 직접 표현한 것으로, 예를 들어 '\n', 3.14(파이) 등이 있습니다

    final double PI = 3.141592653589793; // 실수형 변수를 PI에 리터럴을 상수로 저장합니다

16. Primitive Type과 Reference Type

  • Primitive Type : int, double, char 등 기본 데이터 타입으로 값 자체를 저장합니다.
  • Reference Type : String, 배열, 클래스, 인터페이스 등 객체을 참조하는 타입으로, 실제 값이 저장된 메모리 주소를 가리킵니다.

    String은 불변객체로 한번 생성된 문자열 값은 변경되지 않습니다,
    문자열을 수정하려고 하면 기존 String 객체의 변경이 아닌 새로운 String 객체를 생성하여 참조합니다.

17. Java는 Call by Value

  • Java는 모든 값을 복사하여 전달하므로 Call by Value입니다. 다만, 객체는 참조 주소를 복사하여 전달하여 마치 Call by Reference처럼 보일 수 있습니다.
  • Call by Reference 또한 객체의 참조 주소를 전달하지만, 이는 복사본입니다.

    따라서 메서드에서 객체의 상태를 변경할 수는 있지만, 참조 자체를 변경해도 원본에는 영향을 주지 않습니다.

18. Java 직렬화(Serialization)

  • 자바에서 객체의 상태를 바이트 스트림으로 변환하여 파일에 저장하거나 네트워크를 통해 전송할 수 있게 하는 과정입니다
  • 바이트 스트림으로부터 객체를 복원하는 과정을 역직렬화(Deserialization)라고 합니다
  • 직렬화를 사용하면 프로그램 실행 중 생성한 객체의 상태를 영구적으로 저장하거나 다른 시스템으로 전송할 수 있습니다.
  • 보안문제 : 역직렬화된 객체가 악의적은 객체로 변형될 수 있으므로 보안관리가 필요합니다.
profile
건강하개

0개의 댓글