CS/객체지향프로그래밍

[객체지향프로그래밍] #6 모듈과 패키지

태연한 컴공생 2024. 6. 9. 00:32

<객체 비교와 equals() 메소드>

 

프로그램을 작성하다 보면 두 객체가 같은지 비교해야 하는 상황이 있다.

 

• == 연산자

== 연산자는 두 레퍼런스가 동일한 객체를 가리키는지 비교한다.

Point a = new Point(2,3);
Point b = new Point(2,3);
Point c = a;
if(a == b) // false
   System.out.println("a==b"):
if(a == c) // true
   System.out.println("a==c"):
   
실행결과 : a==c

 

위의 코드가 실행되면 2개의 Point 객체가 생성되고, 레퍼런스 a와 b는 이들을 각각 가리킨다.

 

• boolean equals(Object obj)

equals는 인자로 건네진 객체 obj와 자기 자신을 비교하여 두 객체의 내용이 같은지를 비교하는 메소드이다.

String a = new String("Hello");
String b = new String("Hello");
if (a == b) // false
    System.out.println("a==b");
if (a.equals(b)) // true
    System.out.println("a와 b는 둘 다 Hello입니다.");
    
실행결과 : a와 b는 둘 다 Hello입니다.

 

a와 b는 서로 다른 객체를 가리키므로 두 레퍼런스는 서로 다르며, a == b의 결과도 false이다.

그러나 a와 b가 가리키는 문자열은 같기 때문에 a.equals(b)의 결과는 true이다.

 

따라서 기본 타입의 값을 비교하기 위해서는 == 연산자를 사용하지만, 객체 비교를 위해서는 반드시 equals() 메소드를 사용해야 한다.

 

<StringBuffer 클래스>

 

StringBuffer 클래스는 java.long 패키지에 포함된 클래스로서 String 클래스와 같이 문자열을 다룬다. 

String 객체의 경우 내부의 문자열을 수정할 수 없지만, StringBuffer 객체는 문자열을 저장하는 가변 버퍼를 가지고 있기 때문에 저장된 문자열의 수정이 가능하다.

 

StringBuffer 객체를 생성하는 예는 다음과 같다.

StringBuffer sb = new StringBuffer("java");

 

• 주요 메소드

 

• 활용

 

• 코드 예시

public class StringBufferEx {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("This");

        sb.append(" is pencil"); // 문자열 덧붙이기
        System.out.println(sb);

        sb.insert(7, " my"); // "my" 문자열 삽입 
        System.out.println(sb);

        sb.replace(8, 10, "your"); // "my"를 "your"로 변경 
        System.out.println(sb);

        sb.delete(8, 13); // "your" 삭제
        System.out.println(sb);

        sb.setLength(4); // 스트링 버퍼 내 문자열 길이 수정 
        System.out.println(sb);
    }
}
This is pencil
This is my pencil
This is your pencil
This is pencil
This

 

<StringTokenizer 클래스>

 

StringTokenizer 클래스는 java.until 패키지에 포함되어 있으며, 하나의 문자열을 여러개의 문자열로 분리하기 위해 사용된다. 

문자열을 분리할때 사용되는 기준 문자를 구분 문자(delimiter)라고 하고, 구분 문자로 분리된 문자열을 토큰(token)이라고 한다. 

String query = "name=kitae&arr=seoul&age=21";
StringTokenizer st = new StringTokenizer(query, "&");

 

 

위의 예시에서는 '&'가 구분문자이다.

 

• 생성자와 주요 메소드

 

코드 예시

import java.util.StringTokenizer;

public class StringTokenizerEx {
    public static void main(String[] args) {
        StringTokenizer st = new StringTokenizer("홍길동/장화/홍련/콩쥐/팥쥐", "/");
        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}
홍길동
장화
홍련
콩쥐
팥쥐