//////
Search

220929

Object 클래스

모든 클래스들이 상속하는, 최상위 클래스
개발자가 상속 문법을 작성하지 않더라도 컴파일러가 자동으로 상속시킴.
변수 없이, 11개의 기본 메소드를 지니고 있음.
Object라는 최상위 클래스가 만들어진 이유 : 자바가 객체지향 언어이기 때문. 객체 지향 설계를 따라 수 많은 클래스들의 공통 메소드를 모으다 보니 생겨남.

Object 클래스의 메소드

그대로 사용하는 것도 가능하지만, 주로 하위 클래스에서 오버라이딩 된 상태로 사용 됨.
가장 자주 쓰는 equals()와 toString()만 자세히 알아보자.

equals()메소드

기본 : “==” 연산자를 사용해, 객체의 주소가 동일한 지 검사하여 true와 false 리턴.
Circle c1 = new Circle(10); Circle c2 = new Circle(10); if (c1 == c2) { System.out.println("두 원은 같습니다."); } else { System.out.println("두 원은 다릅니다."); } // "두 원은 다릅니다." 출력 // c1 과 c2 는 서로 다른 객체이고, "=="는 개체의 메모리 주소값을 비교하는 연산이기 때문.
Java
복사
equals()를 오버라이딩 해서 사용하기.
class Circle { private int radius; public Circle(int radius) { this.radius = radius; } public int getRadius() { return this.radius; } // Object 클래스의 equals 메소드를 오버라이딩 해서 사용. @Override public boolean equals(Object obj) { if (obj instanceof Circle) { Circle c = (Circle) obj; if (this.radius == c.getRadius()) { return true; } } return false; } } public class Equals { public static void main(String[] args) { // 오버라이딩 한 equal()를 사용해 객체의 주소 대신, 객체의 내용을 비교. if (c1.equals(c2)) { System.out.println("두 원은 같습니다."); } else { System.out.println("두 원은 다릅니다."); } // "두 원은 같습니다."출력 } }
Java
복사

toString() 메소드

기본 : 객체의 주소값만을 문자 정보로 리턴함.
public class ToString { public static void main(String[] args) { Object obj = new Object(); System.out.println(obj.toString()); // 결과값 // getClass().getName() + "@" + Integer.toHexString(hashCode()); // 클래스 이름 + @ + 주소값을 해쉬코드로 받아 16진수로 캐스팅한 것 // println 메소드 자체가 Object 타입을 매개변수로 받으면 toString() 함수를 호출하도록 작성됨. System.out.println(obj); } }
Java
복사
각 하위 클래스에서 오버라이딩 한 수 많은 toString() 메소드의 예
Date 클래스 : 현재 시스템의 날짜와 시간 정보를 리턴
String 클래스 : 객체에 저장된 문자열을 리턴
→ 각 클래스 별, 필요한 정보가 리턴되도록 오버라이딩 됨
class Student { private String name; private String gender; public Student (String name, String gender) { this.name = name; this.gender = gender; } @Override public String toString() { return "이름은 " + this.name + "이고 성별은 " + this.gender + "입니다."; } } public class ToString2 { public static void main(String[] args) { Student s = new Student("홍길동", "남자"); System.out.println(s); // "이름은 홍길동이고 성별은 남자 입니다." 출력. } }
Java
복사

String 클래스

String 클래스의 객체는 문자들을 문자열(문자 배열) 형식으로 저장함.
String 객체 생성의 두 방법.
public class String1 { public static void main(String[] args) { // 첫 번째 방법. 곧 바로 문자 입력 String s1 = "java"; String s2 = "java"; // 두 번째 방법. 객체 생성자로 문자 입력. String s3 = new String("java"); String s4 = new String("java"); if ( s1 == s2 ) { System.out.println("같습니다."); } else { System.out.println("다릅니다."); } // "같습니다." 출력. // 첫 번째 방법으로 생성한 + 같은 문자 리터럴이 입력된 s1, s2는 같은 객체를 참조하고 있음. if ( s3 == s4 ) { System.out.println("같습니다."); } else { System.out.println("다릅니다."); } // "다릅니다." 출력 // 서로 다른 객체인 s3와 s4는 객체 주소값이 다르기 때문. if ( s3.equals(s4) ) { System.out.println("같습니다."); } else { System.out.println("다릅니다."); } // "같습니다." 출력 // .equals 메소드를 통해 객체 내부의 내용을 비교함. } }
Java
복사
String 클래스에는 각 객체에 저장된 문자열을 다루기 위한 수 많은 메소드들이 있음

String 클래스의 다양한 메소드 활용

public class String2 { public static void main(String[] args) { //charAt(int) : String 배열 객체에서 int번째 문자를 리턴. String s0 = "자바 프로그래밍"; char charValue = s0.charAt(3); System.out.println(charValue); // "프" 출력 // Scanner 객체에서 charAt() 써보기 // Scanner sc = new Scanner(System.in); // char ch = sc.next().charAt(0); // System.out.println(ch); // indexOf() : 매개변수로 입력한 문자의 객체 안 위치를 찾아 리턴. String s1 = "the cat is on the table"; int index = s1.indexOf("table"); // 찾는 문자가 없으면 -1 리턴 if (index == -1) { System.out.println("찾는 문자가 없습니다."); } else { System.out.println(index); // table이 18번째 자리(공백포함)에서 시작됨 -> 18 리턴. } // length() : 공백포함 글자 수를 리턴. System.out.println(s0.length()); //trim() : 문자열 앞 뒤의 공백지우기 String s3 = " I love you "; System.out.println(s3 + " " + s3.length()); System.out.println(s3.trim() + " " + s3.trim().length()); // s3.trim() : 앞 뒤의 공백이 사라진, "I love you"출력 //split() : 기준을 따라 문자열을 단어로 분리해서 배열로 저장해 줌. String[] s4 = "100,200,300,400,500".split(","); for (String s : s4) { System.out.println(s); } // valueOf() : 매개변수의 타입을 문자열로 전환. // 사실상 지금껏 써오던 System.out.println()에 항상 사용되던 메소드임. int num = 100; String s5 = String.valueOf(num); // 100 -> "100" System.out.println(s5); // 참고! Integer.parseInt() -> 문자열로 작성된 정수를 정수 타입으로 바꿈. } }
Java
복사