[Spring Boot] equals 사용법 및 생각

Posted by 김성철

java - equals 사용

2023.03.08 에 작성한 내용

아래와 같이 equals을 사용해서 작성할수 있음  
	=================================================================================================================  
	String aaa = "김성철";  
  
	System.out.println(aaa.equals("김성철"));  
	=================================================================================================================  
  
다만 아래처럼 앞에 있는 객체가 null 값이면 NullPointerException이 발생함  
	=================================================================================================================  
	String aaa = null;  
  
	System.out.println(aaa.equals("김성철"));  
	=================================================================================================================  
  
그래서 이전에 작성한 내용처럼 비교할 문자열을 앞에 넣고 넘겨받은 변수를 뒤에 넣어서 하고 있었음  
	=================================================================================================================  
	String aaa = null;  
  
	System.out.println("김성철".equals(aaa));  
	=================================================================================================================  
  
근데 JAVA 8 버전에서는 Objects.equals 함수가 생성되었음  
사용방법은 Objects.equals(객체1,객체2); 임  
	=================================================================================================================  
    String name = "김성철";  
  
    System.out.println(Objects.equals(name,"김성철"));  
	//true  
  
    String name1 = null;  
  
    System.out.println(Objects.equals(name1,"김성철"));  
	//false , NPE 오류 발생하지 않음  
	=================================================================================================================  
  
위의 Objects.equals 의 내용은 아래와 같음  
null 체크까지 다 하고 있음  
	=================================================================================================================  
	public static boolean equals(Object a, Object b) {  
		return (a == b) || (a != null && a.equals(b));  
	}  
	=================================================================================================================  
  
null 오류가 발생할수 있거나, null을 포함하여 비교하고 싶을 경우 사용하면 됨  

이전에 작성한 내용
##################################################################################################################

기본 사용법

equals 는 자바에서 제공하주는 비교 메소드임  
== 연산자도 비교를 하지만 차이는  
==는 주소를 비교하고, equals 는 안에 들어있는 객체의 값을 비교함  
  
=================================================================================================================  
String a1="aaa";  
String b1="bbb";  
  
if(a1==b1)  
	false;  
  
if(a1.equals(b1)  
	true  
  
String a2="aaa";  
String b2=a2;  
if(a2==b2)  
	true;  
  
=================================================================================================================  

equals 에 대해 작성하게된 이유

중요 한건 이걸 기록하려고 한게 아님 이걸 모르는것도 아니고..  
  
문득 okky 사이트를 보던중 어떠한 사람이 where 1=1 에 대해서 써놓은 글을보다보니  
댓글에 if("aa".equals(str)) 과 if(str.equals("aa") 에 대해서 써놓은 것을 보게되었음  
언뜻보면 같아보이지만 결과가 다르게 나올수 있음  
  
case1. if("aa".equals(str))  
	=================================================================================================================  
  
    String str="aa";  
    if("aa".equals(str)){  
        System.out.println(true);  
    }else{  
        System.out.println(false);  
    }  
  
	출력 : true  
	=================================================================================================================  
  
case2. if(str.equals("aa")  
	=================================================================================================================  
    String str="aa";  
    if(str.equals("aa")){  
        System.out.println(true);  
    }else{  
        System.out.println(false);  
    }  
  
	출력 : true  
	=================================================================================================================  
  
위 두개의 케이스를 해보면 둘다 결과는 true가 나옴  
두개의 객체가 똑같으니까 true 가 나오는건 당연함  
근데 아래와같이 str에 null을 넣어서 실행하면 결과는 다름  
  
case1. if("aa".equals(str))  
	=================================================================================================================  
  
    String str=null;  
    if("aa".equals(str)){  
        System.out.println(true);  
    }else{  
        System.out.println(false);  
    }  
  
	출력 : false  
	=================================================================================================================  
  
case2. if(str.equals("aa")  
	=================================================================================================================  
    String str=null;  
    if(str.equals("aa")){  
        System.out.println(true);  
    }else{  
        System.out.println(false);  
    }  
  
	출력 : Exception in thread "main" java.lang.NullPointerException  
			at com.securus.RunTest.main(RunTest.java:24)  
	=================================================================================================================  
  
위 두개의 차이점은 비교하려고하는 주체가 변수이냐, 아니면 비교값이냐로 할수 있다.  
  
case1. 로 할 경우에는 NullPointerException 이 출력되지 않는다  
해당 값이 없어도 상관 없을 경우에는 이대로 진행해도 된다, 굳이 null 체크를 하지 않아도 된다  
  
case2. 로 할 경우에는 Null 체크를 진행해줘야 한다.  
또한 해당 값이 없이 진행되면 안되는 경우에 적용해도 된다  
  
뭐 전자나 후자나 결국 값이 다 있다면 같은 로직이지만  
Null 체크가 필요없다면 case1로 해서 하는게 더 편의성이 좋다