2021. 04. 13(화) TIL
Java
API(Application Programming Interface)
- 프로그래밍 언어, 라이브러리, 프레임워크각 제공하는 기능
- API가 제공하는 기능을 제어(사용)할 수 있게 만든 인터페이스
※ final
- final 변수명 - 값 변경 금지
- final 메소드 - 하위 클래스 재정의 금지
- final 클래스 - 이 클래스를 상속받아서 하위클래스를 작성할 수 없음
Object 클래스
- 배열을 포함한 모든 객체의 최상위 부모클래스다.
- 명시적으로 extends를 사용해서 부모클래스를 지정하지 않으면 무조건 extends Object로 간주된다.
- Object의 모든 메소드는 모든 클래스가 상속받는다.
- 모든 객체는 Object의 메소드를 사용할 수 있다.
- Object에는 객체와 관련된 필수 기능들이 구현되어 있다.
Object 클래스 주요 메소드
- boolean equals(Object obj)
- 현재 객체와 전달받은 객체가 동일한 객체인지 여부를 반환한다.
- 객체들의 주소값(참조값)을 비교한다.
- 재정의 가능
- int hashCode()
- 현재 객체의 해시코드값을 반환한다.
- 재정의 가능
- String toString()
- 현재 객체에 대한 간단한 정보를 제공한다.
- 클래스이름@16진수해시코드
- 재정의 가능
- Class<?> getClass()
- 현재 객체에 대한 설명서 정보를 제공한다.
- Object clone()
- 현재 객체를 복제한 복사본을 생성해서 제공한다.
package object;
public class ObjectApp1 {
public static void main(String[] args) {
Person p1 = new Person(10, "홍길동", "[email protected]");
Person p2 = new Person(10, "홍길동", "[email protected]");
Person p3 = p1;
Person p4 = p2;
// boolean equals(Object obj) 메소드
// 객체 자신과 obj객체가 동일한 객체인지 여부를 반환한다
boolean result1 = p1.equals(p2);
boolean result2 = p2.equals(p1);
System.out.println("p1이 참조하는 객체와 p2가 참조하는 객체가 같은 객체인가?" + result1);
System.out.println("p2이 참조하는 객체와 p1가 참조하는 객체가 같은 객체인가?" + result2);
}
}
package object;
public class ObjectApp2 {
public static void main(String[] args) {
Person p1 = new Person(10, "홍길동", "[email protected]");
Person p2 = new Person(20, "김유신", "[email protected]");
// String toString()
// 객체에 대한 간단한 정보를 문자열로 변환한다.
// 객체의 멤버변수에 저장된 정보를 반환하도록 재정의해서 사용한다.
System.out.println(p1); // 참조변수값을 출력하면 참조변수.toString()의 반환값이 출력된다.
System.out.println(p2);
System.out.println(p1.toString());
System.out.println(p2.toString());
}
}
StringBuilder와 StringBuffer
-
임시저장소(버퍼)를 가지고 있어서, append(다양한 타입의 데이터)로 새로운 객체 생성없이 임시저장소에 데이터를 저장할 수 있다.
-
임시저장소에 저장된 데이터는 toString() 메소드를 실행해서 문자열(String)로 제공받을 수 있다.
-
StringBuilder와 StringBuffer의 사용법은 완전히 동일하다.
- StringBuffer는 멀티스레드환경에서 안전하게 사용할 수 있지만 속도가 느리다.
- StringBuilder는 멀티스레드환경에서 안전하지 않지만, 속도는 빠르다.
-
사용 예제
String text = "국어" + 70 + "수학" + 80 + "영어" + 100;
// ["국어"]
// ["국어70"]
// ["국어70수학"]
// ["국어70수학80"]
// ["국어70수학80영어"]
// ["국어70수학80영어100"]
// text에 최종적으로 대입되는 값은 "국어70수학80영어100" 다.
// String객체의 불변특성 때문에 불필요한 객체 5개가 추가로 생성된다.
StringBuilder sb = new StringBuilder();
sb.append("국어"); // 버퍼에 저장
sb.append(70); // 버퍼에 저장
sb.append("수학"); // 버퍼에 저장
sb.append(80); // 버퍼에 저장
sb.append("영어"); // 버퍼에 저장
sb.append(100); // 버퍼에 저장
String finalText = sb.toString(); // 버퍼에 저장된 데이터가 전부 연결된 문자열이 반환된다.
-
StringBuilder를 사용하면 "+" 연산을 사용해서 이어붙이기 할 때 보다 불필요한 객체의 생성이 억제되어서 메모리 효율 및 실행 성능이 개선된다.
Wrapper 클래스와 Auto-Boxing/Unboxing
Wrapper 클래스
- 기본자료형 타입에 대응되는 클래스다.
- 기본자료형 값을 가지고 있는 객체를 만들 수 있다.
- java.lang 패키지에 정의되어 있다.
- 사용해야 할 때
- 기본자료값이 아닌 객체로 저장해야할 때
- 호출할 메소드의 매개변수가 객체를 요구할 때
- null값이 저장될 가능성이 있을 때
- 해당 기본자료형값에 대한 다양한 기능을 실행해야 할 때
- 지원하는 Wrapper 클래스
| 기본자료형 | Wrapper 클래스|
| --- | --- |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
오토박싱/오토언박싱
-
JAVA 1.5버전부터 도입된 기능
-
기본자료형 타입과 Wrapper객체 타입간의 변환을 자동으로 지원한다.
-
오토박싱
Integer instance = new Integer(10); // 박싱
Integer instance = 10; // 오토박싱
// Integer instance = new Integer(10); // 실제로 실행되는 코드
-
오토언박싱
Integer instance = new Integer(10); // 박싱
int value = instance.intValue(); // 언박싱
int value = instance; // 오토 언박싱
// int value = instance.intValue(); // 실제로 실행되는 코드
-
실제 활용 예제
public class Sample {
public void test1(int value) {
수행문
}
public void test2(Integer instance) {
수행문
}
}
public static void main(String args) {
Sample sample = new Sample();
sample.test1(1);
sample.test2(1); // 실제 실행되는 코드 sample.test2(new Integer(1));
}
Author And Source
이 문제에 관하여(2021. 04. 13(화) TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@eastgun_/2021.-04.-13화-TIL
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 배열을 포함한 모든 객체의 최상위 부모클래스다.
- 명시적으로 extends를 사용해서 부모클래스를 지정하지 않으면 무조건 extends Object로 간주된다.
- Object의 모든 메소드는 모든 클래스가 상속받는다.
- 모든 객체는 Object의 메소드를 사용할 수 있다.
- Object에는 객체와 관련된 필수 기능들이 구현되어 있다.
Object 클래스 주요 메소드
- boolean equals(Object obj)
- 현재 객체와 전달받은 객체가 동일한 객체인지 여부를 반환한다.
- 객체들의 주소값(참조값)을 비교한다.
- 재정의 가능
- int hashCode()
- 현재 객체의 해시코드값을 반환한다.
- 재정의 가능
- String toString()
- 현재 객체에 대한 간단한 정보를 제공한다.
- 클래스이름@16진수해시코드
- 재정의 가능
- Class<?> getClass()
- 현재 객체에 대한 설명서 정보를 제공한다.
- Object clone()
- 현재 객체를 복제한 복사본을 생성해서 제공한다.
package object;
public class ObjectApp1 {
public static void main(String[] args) {
Person p1 = new Person(10, "홍길동", "[email protected]");
Person p2 = new Person(10, "홍길동", "[email protected]");
Person p3 = p1;
Person p4 = p2;
// boolean equals(Object obj) 메소드
// 객체 자신과 obj객체가 동일한 객체인지 여부를 반환한다
boolean result1 = p1.equals(p2);
boolean result2 = p2.equals(p1);
System.out.println("p1이 참조하는 객체와 p2가 참조하는 객체가 같은 객체인가?" + result1);
System.out.println("p2이 참조하는 객체와 p1가 참조하는 객체가 같은 객체인가?" + result2);
}
}
package object;
public class ObjectApp2 {
public static void main(String[] args) {
Person p1 = new Person(10, "홍길동", "[email protected]");
Person p2 = new Person(20, "김유신", "[email protected]");
// String toString()
// 객체에 대한 간단한 정보를 문자열로 변환한다.
// 객체의 멤버변수에 저장된 정보를 반환하도록 재정의해서 사용한다.
System.out.println(p1); // 참조변수값을 출력하면 참조변수.toString()의 반환값이 출력된다.
System.out.println(p2);
System.out.println(p1.toString());
System.out.println(p2.toString());
}
}
StringBuilder와 StringBuffer
-
임시저장소(버퍼)를 가지고 있어서, append(다양한 타입의 데이터)로 새로운 객체 생성없이 임시저장소에 데이터를 저장할 수 있다.
-
임시저장소에 저장된 데이터는 toString() 메소드를 실행해서 문자열(String)로 제공받을 수 있다.
-
StringBuilder와 StringBuffer의 사용법은 완전히 동일하다.
- StringBuffer는 멀티스레드환경에서 안전하게 사용할 수 있지만 속도가 느리다.
- StringBuilder는 멀티스레드환경에서 안전하지 않지만, 속도는 빠르다.
-
사용 예제
String text = "국어" + 70 + "수학" + 80 + "영어" + 100;
// ["국어"]
// ["국어70"]
// ["국어70수학"]
// ["국어70수학80"]
// ["국어70수학80영어"]
// ["국어70수학80영어100"]
// text에 최종적으로 대입되는 값은 "국어70수학80영어100" 다.
// String객체의 불변특성 때문에 불필요한 객체 5개가 추가로 생성된다.
StringBuilder sb = new StringBuilder();
sb.append("국어"); // 버퍼에 저장
sb.append(70); // 버퍼에 저장
sb.append("수학"); // 버퍼에 저장
sb.append(80); // 버퍼에 저장
sb.append("영어"); // 버퍼에 저장
sb.append(100); // 버퍼에 저장
String finalText = sb.toString(); // 버퍼에 저장된 데이터가 전부 연결된 문자열이 반환된다.
-
StringBuilder를 사용하면 "+" 연산을 사용해서 이어붙이기 할 때 보다 불필요한 객체의 생성이 억제되어서 메모리 효율 및 실행 성능이 개선된다.
Wrapper 클래스와 Auto-Boxing/Unboxing
Wrapper 클래스
- 기본자료형 타입에 대응되는 클래스다.
- 기본자료형 값을 가지고 있는 객체를 만들 수 있다.
- java.lang 패키지에 정의되어 있다.
- 사용해야 할 때
- 기본자료값이 아닌 객체로 저장해야할 때
- 호출할 메소드의 매개변수가 객체를 요구할 때
- null값이 저장될 가능성이 있을 때
- 해당 기본자료형값에 대한 다양한 기능을 실행해야 할 때
- 지원하는 Wrapper 클래스
| 기본자료형 | Wrapper 클래스|
| --- | --- |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
오토박싱/오토언박싱
-
JAVA 1.5버전부터 도입된 기능
-
기본자료형 타입과 Wrapper객체 타입간의 변환을 자동으로 지원한다.
-
오토박싱
Integer instance = new Integer(10); // 박싱
Integer instance = 10; // 오토박싱
// Integer instance = new Integer(10); // 실제로 실행되는 코드
-
오토언박싱
Integer instance = new Integer(10); // 박싱
int value = instance.intValue(); // 언박싱
int value = instance; // 오토 언박싱
// int value = instance.intValue(); // 실제로 실행되는 코드
-
실제 활용 예제
public class Sample {
public void test1(int value) {
수행문
}
public void test2(Integer instance) {
수행문
}
}
public static void main(String args) {
Sample sample = new Sample();
sample.test1(1);
sample.test2(1); // 실제 실행되는 코드 sample.test2(new Integer(1));
}
Author And Source
이 문제에 관하여(2021. 04. 13(화) TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@eastgun_/2021.-04.-13화-TIL
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
임시저장소(버퍼)를 가지고 있어서, append(다양한 타입의 데이터)로 새로운 객체 생성없이 임시저장소에 데이터를 저장할 수 있다.
임시저장소에 저장된 데이터는 toString() 메소드를 실행해서 문자열(String)로 제공받을 수 있다.
StringBuilder와 StringBuffer의 사용법은 완전히 동일하다.
- StringBuffer는 멀티스레드환경에서 안전하게 사용할 수 있지만 속도가 느리다.
- StringBuilder는 멀티스레드환경에서 안전하지 않지만, 속도는 빠르다.
사용 예제
String text = "국어" + 70 + "수학" + 80 + "영어" + 100;
// ["국어"]
// ["국어70"]
// ["국어70수학"]
// ["국어70수학80"]
// ["국어70수학80영어"]
// ["국어70수학80영어100"]
// text에 최종적으로 대입되는 값은 "국어70수학80영어100" 다.
// String객체의 불변특성 때문에 불필요한 객체 5개가 추가로 생성된다.
StringBuilder sb = new StringBuilder();
sb.append("국어"); // 버퍼에 저장
sb.append(70); // 버퍼에 저장
sb.append("수학"); // 버퍼에 저장
sb.append(80); // 버퍼에 저장
sb.append("영어"); // 버퍼에 저장
sb.append(100); // 버퍼에 저장
String finalText = sb.toString(); // 버퍼에 저장된 데이터가 전부 연결된 문자열이 반환된다.
StringBuilder를 사용하면 "+" 연산을 사용해서 이어붙이기 할 때 보다 불필요한 객체의 생성이 억제되어서 메모리 효율 및 실행 성능이 개선된다.
Wrapper 클래스
- 기본자료형 타입에 대응되는 클래스다.
- 기본자료형 값을 가지고 있는 객체를 만들 수 있다.
- java.lang 패키지에 정의되어 있다.
- 사용해야 할 때
- 기본자료값이 아닌 객체로 저장해야할 때
- 호출할 메소드의 매개변수가 객체를 요구할 때
- null값이 저장될 가능성이 있을 때
- 해당 기본자료형값에 대한 다양한 기능을 실행해야 할 때
- 지원하는 Wrapper 클래스
| 기본자료형 | Wrapper 클래스|
| --- | --- |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
오토박싱/오토언박싱
-
JAVA 1.5버전부터 도입된 기능
-
기본자료형 타입과 Wrapper객체 타입간의 변환을 자동으로 지원한다.
-
오토박싱
Integer instance = new Integer(10); // 박싱 Integer instance = 10; // 오토박싱 // Integer instance = new Integer(10); // 실제로 실행되는 코드
-
오토언박싱
Integer instance = new Integer(10); // 박싱 int value = instance.intValue(); // 언박싱 int value = instance; // 오토 언박싱 // int value = instance.intValue(); // 실제로 실행되는 코드
-
실제 활용 예제
public class Sample { public void test1(int value) { 수행문 } public void test2(Integer instance) { 수행문 } }
public static void main(String args) { Sample sample = new Sample(); sample.test1(1); sample.test2(1); // 실제 실행되는 코드 sample.test2(new Integer(1)); }
Author And Source
이 문제에 관하여(2021. 04. 13(화) TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eastgun_/2021.-04.-13화-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)