베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 스레드
    • 스프링시큐리티
    • Spring
    • jpa
    • dfs
    • 함수형인터페이스
    • 코드업
    • BFS
    • 알고리즘
    • java
    • 백준
    • 자바
    • 데이터베이스
    • C++
    • leetcode
    • 자바8
    • 스프링
    • 운영체제
    • 이펙티브자바
    • 토비스프링

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    JAVA

    [Java] isSameAs와 isEqaulTo

    2022. 1. 7. 21:46

    타입에 따른 값 저장 방법

    기본적으로 char, int와 같은 기본형 타입은 값을 저장한다.

    int num = 1; // 1이라는 값이 저장됨

     

    하지만, Studnet()와 같은 객체는 주소값이 저장된다.

    Studnet student1 = new Studnet("mango");

     

    isSameAs

       테스트할 때 주로 사용되는 isSameAs는 객체의 주소 기반인 == 비교를 한다. 다음 코드의 출력값을 예상해보자.

    int a = 1;
    int b = 1;
    System.out.println(a==b);

     

    출력값으로 true가 나온다. 그렇다면 a와 b의 객체가 같은 주소를 갖고 있다는 말인가? 그렇지 않다. 자바의 == 연산은 객체가 하나라도 원시형이면 값 비교를 한다. 따라서 a == b가 true로 출력이 되는 것이다. 

     

    따라서 이럴 때는 isSameAs를 써도 잘 동작한다. 반면에 다음의 코드를 살펴보자.

    Student student1 = new Student("mango");
    Student student2 = new Student("mango");
    System.out.println(student1 == student2);

     

    출력값으로 false가 나온다. 이는 student1과 studnet2의 객체의 주소가 다르기 때문이다. 따라서 같은지 판단을 하려면 isEqualTo를 사용하여야 한다. 

     

     

    isEqualTo

       isEqualTo는 값을 기준으로 비교를 한다. 따라서 만약 Studnet 객체를 비교한다고 하면, Student객체의 속성 중에서 어떤 속성을 기준으로 비교를 할 것인지 정해주어야 한다.

    assertThat(student1.name).isEqualTo(student2.name);

     

     

    정리

       isSameAs는 자바의 ==연산과 같으며, 원시형 타입은 값 비교를 하고, 객체는 주소 비교를 한다. 

       isEqualTo는 값을 기준으로 비교를 한다. 따라서 만약 객체의 값이 같은지 비교하고 싶다면 이를 사용한다.

     

     

     

      'JAVA' 카테고리의 다른 글
      • [Java] 자바에서 제공하는 함수형 인터페이스
      • [Java] 함수형 인터페이스와 람다 표현식
      • 좋은 객체 지향 설계의 5가지 원칙 (SOLID)
      • [Java] Iterator 사용법
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바