- 자바 API는 다양한 클래스들을 제공하는데, 그 중 java.lang 패키지에는 자바 프로그래밍에 기본적이고 다양한 클래스들이 다수 포함되어 있다.
- API란? (위키백과 참고)
API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.
Object class
clone()
: 객체의 복사는 얕은복사(참조값만을 복사) & 깊은복사(메모리를 복사)로 나뉜다.
1 2 3 4 5 6 7 8 9 10 11 12 | package chapter14.javaBasicClass; public class CloneTest implements Cloneable{ public int x; public int y; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package chapter14.javaBasicClass; public class CloneTestMain { public static void main(String[] args) { CloneTest c1 = new CloneTest(); //CloneTest의 객체 생성. CloneTest c2 = null; try { c2 = (CloneTest) c1.clone(); //생성한 c1객체의 clone()메서드로 객체를 복사한다. } catch (CloneNotSupportedException e) { e.printStackTrace(); } c1.x = 10; c1.y = 20; c2.x = 30; c2.y = 40; System.out.println("c1.x = " + c1.x + ", c1.y = " + c1.y); //c1의 멤버변수 출력 System.out.println(c1); //c1의 참조값 출력 System.out.println("c2.x = " + c2.x + ", c2.y = " + c2.y); System.out.println(c2); } } | cs |
-> 결과를 확인해보면, c1과 c2의 타입은 동일하지만, 메모리는 따로 사용하고 있음(깊은복사)을 알 수 있다.
equals()
: 기본 타입의 변수들은 두 값이 같은지를 '=='연산자로 확인하지만, 객체는 equals() 메서드를 통해 확인한다. 두 객체가 같으면 true, 다르면 false를 반환, 두 객체의 참조값을 비교
1 2 3 4 5 | package chapter14.javaBasicClass; public class EqualsTest { public int x; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package chapter14.javaBasicClass; public class EqualsTestMain { public static void main(String[] args) { EqualsTest e1 = new EqualsTest(); EqualsTest e2 = new EqualsTest(); e1.x = 1; e2.x = 1; System.out.println(e1.equals(e2)); } } //EqualsTest 클래스가 equals()를 재정의 하지 않아 equals()가 단순히 참조값만 비교하기 때문에 //결과는 false. | cs |
----------------------------------------------------------------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package chapter14.javaBasicClass; public class EqualsTest { public int x; @Override public boolean equals(Object obj) { //equals()를 재정의함. if (obj instanceof EqualsTest) { //파마리터의 타입이 현재 클래스와 동일하다면, //안쪽의 if문에서 두 멤버변수의 값이 동일한지 비교한다. EqualsTest var = (EqualsTest) obj; if (this.x == var.x) { return true; } } return false; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package chapter14.javaBasicClass; public class EqualsTestMain { public static void main(String[] args) { EqualsTest e1 = new EqualsTest(); EqualsTest e2 = new EqualsTest(); e1.x = 1; e2.x = 1; System.out.println(e1.equals(e2)); } } //EqualsTest 클래스에서 equals()를 재정의했다. e1과 e2의 타입이 동일하고, 멤버변수 x의 값도 동일하기 때문에, //결과는 true | cs |
----------------------------------------------------------------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package chapter14.javaBasicClass; import java.util.Scanner; public class StrEqualsMain { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String id = "test"; String pwd = "1234"; System.out.println("id : "); String id_str = sc.next(); // 문자열로 입력받은 값을 id_str에 저장 System.out.println("pwd : "); String pwd_str = sc.next(); // 문자열로 입력받은 값을 pwd_str에 저장 if (id.equals(id_str) && pwd.equals(pwd_str)) { // 클래스의 멤버변수 id와 pwd가 입력받은 값과 동일하다면. System.out.println("로그인 성공"); } else { System.out.println("로그인 실패"); } sc.close(); // scanner는 닫아주는게 원칙 } } //String클래스의 equals()는 대소문자를 구분한다. | cs |
hashCode()
: 객체가 할당 받은 메모리에 맵핑되는 유일한 정수. hashCode()는 이 값을 반환해준다.
자바는 메모리 사용의 안정성을 위해서, 애플리케이션이 메모리에 직접 접근하는 걸 피한다. 그래서 객체가 new로 생성되면 자바 시스템이 객체가 사용할 메모리를 할당하고 이 메모리에 접근할 수 있는 티켓인 해시코드를 생성해 그 값을 반환하는데 이것이 참조값이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package chapter14.javaBasicClass; class Test{ public int x; public int y; } public class HashTestMain { public static void main(String[] args) { //t1과 t3은 new연산자를 통해 객체를 생성하고, t2는 t1의 참조값을 복사한다. Test t1 = new Test(); Test t2 = t1; Test t3 = new Test(); System.out.println("t1.hashCode() : " + t1.hashCode()); System.out.println("t2.hashCode() : " + t2.hashCode()); System.out.println("t3.hashCode() : " + t3.hashCode()); } } //t2는 t1의 참조값을 복사했으므로 두 객체의 해시 코드가 동일하다. | cs |
toString()
: 해당 객체가 어떤 객체인지를 나타내는 문자열을 반환한다.
그래서 사람들이 메서드의 결과를 읽고 쉽게 이해할 수 있도록 만드는 것이 좋으며, 디버깅에서도 유용하게 사용된다.
Object class의 toString()은 "클래스명@hash Code"를 반환하도록 구현되어 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package chapter14.javaBasicClass; public class Member { private String name; private String tel; private String address; public Member(String name, String tel, String address) { this.name = name; this.tel = tel; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Member [name=" + name + ", tel=" + tel + ", address=" + address + "]"; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package chapter14.javaBasicClass; class Test2 { public int x; public int y; } public class MemberMain { public static void main(String[] args) { System.out.println("toString()을 재정의하지 않은 객체 출력"); Test2 t1 = new Test2(); System.out.println("t1 : " + t1); System.out.println("t1.toString() : " + t1.toString()); System.out.println(); System.out.println("toString()을 재정의한 객체 출력"); Member m1 = new Member("aaa", "111", "서울시"); Member m2 = new Member("bbb", "222", "경기도"); System.out.println("m1 : " + m1); System.out.println("m2 : " + m2); } } | cs |
'Computer > Java' 카테고리의 다른 글
String class (0) | 2018.09.01 |
---|---|
wrapper class (0) | 2018.09.01 |
접근제어자와 캡슐화, 그리고 getter, setter메서드 (0) | 2018.08.14 |
java 환경변수 설정하기 (0) | 2018.08.11 |
인터페이스를 상속받은 클래스를 이용하여 홀수와 소수의 합을 구하기 (0) | 2018.08.08 |