안녕하세요 오늘은 Java의 String문자열을 이용해서

equals()와 ==의 차이를 알아보겠습니다.

이 둘을 알기 전 메모리 관점에서 봐야하는데요

먼저 하나의 예시를 들어보겠습니다.


String을 생성하는 방법은 2가지가 있습니다.

String str1 = "sujin"; 
String str2 = new String("sujin");

System.out.println(str1); // result : sujin 
System.out.println(str2); // result : sujin

코드를 보시면 각각의 생성 방식이 다릅니다.


String str1 = "sujin";

위 구문의 경우 Heap내부의 String constant pool이란 곳에 저장을 합니다. 

만약 이미 존재하는 문자열이 있으면 이미 저장된 인덱스의 번호를 가리키게 되어있습니다.

String str2 = new String("sujin");

다음 위 구문은 말 그대로 객체를 생성합니다.

Heap내부의 레퍼런스 주소를 가지고 있습니다.


String str1 = "sujin"; 
String str2 = "sujin";

String str3 = new String("sujin"); 
String str4 = new String("sujin"); 

System.out.println(str1 == str2);	// result : true
System.out.println(str1 == str3);	// result : false
System.out.println(str3 == str4);	// result : false
System.out.println(str1.equals(str3)); // result : true

위 설명을 듣고 보니 이 소스가 이해가 되시나요?

==은 객체의 주소값을 비교하고 equals()는 객체의 값을 비교합니다.

이 것으로 조건문을 사용할 때 어떤 것을 사용해야 할지 더 명확하게 작성할 수 있습니다.

'Java > java' 카테고리의 다른 글

객체지향 프로그래밍이란? (Object Oriented Programming)  (0) 2018.06.27

객체지향 프로그래밍 (Object Oriented Programming)


현실세계의 객체를 필드와 메서드로 정의한 Class를 기반으로 실제 메모리가 잡힌 객체들을 조합해 전체 프로그램을 완성해 나가는 개발 기법

객체지향 프로그래밍의 장단점


1. 장점


  • 코드 재사용이 용이
  • 유지보수가 쉬움
  • 대형 프로젝트에 적합


2. 단점


  • 처리속도가 상대적으로 느림
  • 객체가 많으면 용량이 커질 수 있음
  • 설계 시 많은 시간과 노력이 필요


객체지향 프로그래밍의 특징


1. 캡슐화

  • 어떤 클래스를 사용함에 있어서 그 클래스가 제공하는 메서드 기능의 사용법만 알고 그 기능만을 사용할 뿐 실제로 그 메서드가 어떻게 움직이는지는 굳이 알 필요가 없음


2. 은닉화

  • 외부 객체에서 구현방식은 알 수 없도록 private으로 만들어 클래스를 숨기고 별도로 접근할 수 있는 getter/setter 메서드를 통해 접근하도록 하는 방식
  • 클래스를 사용함에 있어서 속성에 직접 접근하는 것은 데이터 무결성 오류에 치명적일 수 있기 때문에 접근을 제한함


3. 상속

  • 부모 클래스를 자식이 접근할 수 있도록 물려받는 방식


4. 다형성

  • 부모클래스 타입으로 해당 부모를 상속받는 여러 자식 클래스를 대입할 수 있는 성질
  • 단순히 하나의 행동을 여러 가지 형태로 구현하는 것임


'Java > java' 카테고리의 다른 글

[Java] String equals와 == 차이  (0) 2018.07.01

+ Recent posts