java.lang패키지(7) - 래퍼(Wrapper) 클래스
·
자바/java.lang 패키지
1. 래퍼(Wrapper) 클래스 - 때로는 기본형 변수도 어쩔 수 없이 객체로 다뤄야 할 때, 기본형 값들을 객체로 변환하여 작업을 수행해야 한다. 이때, 사용되는 것이 래퍼 클래스이다. - 래퍼 클래스를 이용하면 기본형 값을 객체로 다룰 수 있다. - 래퍼 클래스의 생성자는 매개변수로 문자열이나 각 자료형의 값들을 인자로 받는다. 이 때, 주의해야 할 것은 각 자료형에 알맞은 문자열을 사용해야 한다는 것이다. - 예를 들어, new Integer("1.0")을 실행하면 NumberFormatException이 발생한다. 1-1. 래퍼 클래스의 생성자들 - Boolean, Character, Byte, Short, Integer, Long, Float, Double 이 있는데, 모두 생성자를 만들 수 ..
java.lang패키지(6) - Math 클래스
·
자바/java.lang 패키지
1. Math 클래스 - 기본적으로 Math 클래스는 생성자가 private으로 되어 있기 때문에 만들 수 없다. 그 이유는 인스턴스 변수가 없고 모두 다 static으로 되어 있기 때문이다. - 상수로는 다음과 같다. (1) E: 자연로그의 밑 (2) PI: 원주율 1-1. round() 메서드 - round() 메서드는 항상 첫째 자리에서 반올림을 해서 정수값(long)을 결과로 돌려준다. - 그러나 그렇게 되면 두번째 자리 이상에서는 반올림을 할 수 없으므로, 아래의 순서를 따른다. (1) 해당 N자리에서 반올림 한다면, 해당 자리수만큼 10^(N-1)을 곱한다. (2) Math.round()를 사용한다. (3) 10^(N-1)만큼 다시 나눠준다. - 예를 들어, 90.7552에서 셋째 자리 반올림..
java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스
·
자바/java.lang 패키지
1. StringBuffer 클래스 - String 클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만, StringBuffer 클래스는 변경이 가능하다. - 내부적으로 문자열을 편집을 위한 공간(buffer)이 있으며, 인스턴스 생성 시, 그 크기를 지정할 수 있다. - 이때, 크기는 충분히 잡는 것이 좋다. - StringBuffer(int length) 생성자를 통해 크기를 지정하는데, 만약 무시한다면, 16개의 문자를 저장할 수 있는 크기의 버퍼를 생성한다. - 아래의 코드는 StringBuffer에 대한 클래스 생성자 구조이다. public final class StringBuffer implements java.io.Serializable{ private char[] value; ..
java.lang패키지(4) - String 클래스(2)
·
자바/java.lang 패키지
1. join()과 StringJoiner 클래스 - join()은 split()과 반대의 역할을 한다. - 아래의 코드를 보자. - 또한 java.util.StringJoiner 클래스를 사용해서 문자열을 결합할 수 있다. - 아래의 코드를 보자. 2. 문자 인코딩 변환 ( getBytes()를 사용하여 해당 문자열의 문자 인코딩을 바꿔준다. ) ( 또한 byte[] 코드를 다시 문자열로 바꿔줄 수 있다. ) - 아래의 코드를 보자. ( "가"에 대한 UTF-8은 0xEAB080 이고, CP949는 0xBOA1이다. ) ( String.format() 메서드는 c언어에서의 printf()이다. ) 3. 기본형 값과 String 값과의 변환 ( 아래는 기본형 값 -> String 값으로 변환하는 코드이다..
java.lang패키지(3) - String 클래스(1)
·
자바/java.lang 패키지
1. 변경 불가능한(immutable) 클래스 - 변경 불가능한 클래스는 아래의 예시를 통해 이해하자. (1) String 클래스의 참조변수 a와 b가 있는데, 각각 "a"와 "b"를 가지고 있다고 가정한다. (2) 이 둘을 합쳐서 참조변수 a에 저장하면 "ab" 문자열이 저장된다. ( 그러나 이것은 변경된 것이 아니라 새로운 인스턴스를 생성된 것이고 기존에 "a"가 저장된 주소공간을 가리키는 것이 아니라 새로 생성된 인스턴스 공간을 가리키게 되는 것이다. ) ( 단, 이러한 작업은 메모리 공간을 더욱 늘리게 되므로, 결합횟수를 줄이는 것이 좋다. ) ( 만약 문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많은 경우에는 String 클래스 대신 StringBuffer 클래스를 사용하는 것이 좋다. ..
java.lang 패키지(2) - Object 클래스(2)
·
자바/java.lang 패키지
1. 얇은 복사와 깊은 복사 - clone()은 단순히 객체에 저장된 값을 그대로 복제할 뿐, 객체가 참조하고 있는 객체까지 복제하지 않는다. - 기본형 배열인 경우는 오버라이딩을 해서 문제가 되지 않지만, 객체 배열을 clone()으로 복제하는 경우에는 원본과 복제본이 같은 객체를 공유하므로 완전한 복제가 아니다. 이러한 것을 shallow copy라고 부른다. - 반면에 원본이 참조하고 있는 객체까지 복제하는 것을 deep copy라고 한다. - 아래의 코드는 shallow copy를 보여준다. ( c1의 객체 p의 x를 4로 바꿨지만 c2의 객체 p의 x도 영향을 주어 출력값이 4가 나왔다. ) ( 그러므로, 확실하게 deep copy를 통해 옮겨주어야 한다. ) - 아래의 코드는 deep copy..
java.lang 패키지(1) - Object 클래스(1)
·
자바/java.lang 패키지
1. Object 클래스 - Object 클래스는 멤버변수는 없고 오직 11개의 메서드만 가지고 있다. - 아래의 중요한 메서드 몇가지만 알아보자. 1-1. equals(Obejct obj) - 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean으로 알려주는 역할을 한다. - 그렇기 때문에 같은 클래스의 객체라도 서로 다를 수밖에 없다. - 아래의 코드를 보고 이해해보자. - 또한 아래의 코드처럼 오버라이딩을 통해 또 다른 비교를 할 수 있다. 1-2. hashCode() - 이 메서드는 해싱 기법에 사용되는 '해시 함수'를 구현한 것이다. - 해싱은 데이터 관리 기법 중의 하나인데, 대량의 데이터를 저장하고 검색하는 데 유용하다. - 일반적으로 해시코드가 같은 두 객체가 존재할 수 있..