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
복사