[LG 유레카] Object, String
Object클래스
Object클래스의 메서드
모든 클래스의 최고 조상으로 오직 11개의 메서드만을 가지고 있습니다.
equals()
, hashCode()
, toString()
은 적절히 오버라이딩해야합니다.
notify()
, wait()
등은 쓰레드와 관련된 메서드 입니다.
Object클래스의 메서드 | 설 명 |
---|---|
protected Object clone() | 객체 자신의 복사본을 반환한다. |
public boolean equals(Object obj) | 객체 자신과 객체 obj가 같은 객체인지 알려준다(같으면 true) |
protected void finalize() | 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출된다. 이 때 수행되어야하는 코드가 있는 경우에만 오버라이딩한다. |
public class getClass() | 객체 자신의 클래스 정보를 담고 있는 Class인스턴스를 반환한다. |
public int hashCode() | 객체 자신의 해시코드를 반환한다. |
public String toString() | 객체 자신의 정보를 문자열로 반환한다. |
public void notify() | 객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨운다. |
public void notifyAll() | 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다. |
public void wait() | 다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 한다.(timeout은 천 분의1초, nanos는 109분의 1초) |
publiv void wait(long timeout) | 다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 한다.(timeout은 천 분의1초, nanos는 109분의 1초) |
public void wait(long timeout, int nanos) | 다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 한다.(timeout은 천 분의1초, nanos는 109분의 1초) |
equals(Object obj)
객체 자신과 주어진 객체를 비교합니다. 같으면 true이고 다르면 false입니다.
Object클래스에 정의된 equals()는 참조변수 값(객체의 주소)을 비교합니다.
public boolean equals(object obj) {
return (this==obj);
}
equals()를 오버라이딩해서 인스턴스변수의 값을 비교하도록 바꿉니다.
hashCode()
객체의 해시코드를 반환하는 해시 함수 입니다.
해시코드는 데이터를 저장하고 검색하는 방법중의 하나인 해싱을 구현한 컬렉션 클래스에서 객체를 저장하고 읽어올 때 사용하는 키입니다.
동일한 실행에서 한 객체에 대해 hashCode()를 반복해서 호출했을 때 얻어지는 해시코드는 동일해야 합니다.
호출할 때마다 값이 달라지면 안됩니다.
일반적으로 해시코드가 같은 인스턴스들이 존재하는 것은 가능하지만 Object클래스에 정의된 hashCode()는 객체의 주소값으로 해시코드를 생성하므로 두 인스턴스의 해시코드는 같을 수 없습니다.
equal()를 오버라이딩하면, hashCode()도 적절히 오버라이딩 해야합니다.
toString()
객체의 정보를 문자열로 제공할 목정으로 정의된 메서드 입니다.
getClass()
자신이 속한 클래스의 Class객체를 반환하는 메서드입니다.
Class객체는 클래스이 모든 정보를 담고 있으며, 클래스당 단 1개만 존재합니다. 클래스 파일(*.class)이 메모리에 로드될때 생성됩니다.
clone()
String클래스
String클래스의 특징
문자형 배열(char[])과 그에 관련된 메서드들이 정의되어 있습니다.
String인스턴스의 내용은 바꿀 수 없습니다.
String str = “abc”;와 String str = new String(“abc”);의 비교
String str1 = “abc”;
String str2 = “abc”;
이것은 str1가 먼저 “abc”로 초기화했고, str2가 “abc”라는 값이 있는 주소를 같이 공유합니다.
String str3 = new String(“abc”);
String str4 = new String(“abc”)
위의 소스코드는 생성자로 각각 “abc”라는 값을 다른 주소에 저장합니다.
빈 문자열(“”, empty string)
-
내용이 없는 문자열, 크기가 0인 char형 배열을 저장하는 문자열입니다.
-
크기가 0인 배열을 생성하는 것은 어느 타입이나 가능합니다.
char [] cArr = new char[0]; //크기가 0인 char 배열 int [] iArr = {}; //크기가 0인 int 배열
-
String str=”“;은 가능해도 char c = ‘‘;는 불가능
-
String 은 참조형의 기본값인 null 보다 빈 문자열로 초기화하고 char형은 기본값인 ‘\u0000’보다 공백으로 초기화
String s= null; char c ='\u0000' => String s = "";//빈 문자열로 초기화 char c = ' ';//공백으로 초기화
String클래스의 생성자와 메서드
메서드 | 설명 | 예제 |
---|---|---|
String (String s) | 주어진 문자열(s)을 갖는 String인스턴스를 생성한다. | String s = new String(“Hello”);s="Hello" |
String (char [] value) | 주어진 문자열(value)을 갖는 String인스턴스를 생성한다. | char[] c ={‘H’, ‘e’, ‘1’, ‘1’ ‘e’} String s = new String(c) s="Hello" |
String (StringBuffer buf) | StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String 인스턴스를 생성한다. | StringBuffer sb = new StringBuffer(“Hello”); String s = new String(sb); s="Hello" |
char charAt (int index) | 지정된 위치(index)에 있는 문자를 알려준다. (index 는 0부터 시작) | String s = “Hello” char c=s.charAt(1); c='e' |
String concat (String str) | 문자열(str)을 뒤에 덧붙인다. | String s = “Hello” String s2 = s.concat(“ wrold” s2="Hello World" |
boolean contains (CharSequence s) | 지정된 문자열(s)이 포함되어있는지 검사한다. | String s =”abcedfg” boolean b=s.contains(“bc”); b=true |
boolean endsWith (String suffix) | 지정된 문자열(suffix)로 끝나는지 검사한다. | String file =”Hello.txt” boolean b=file.endsWith(“txt”); b=true |
boolean equals(Object obj) | 매개변수로 받은 문자열(obj)과 String인스턴스의 문자열을 비교한다. obj가 String이 아니거나 문자열이 다르면 false를 반환한다. | String s = “Hello” boolean b=s.equals(“Hello”); b=true |
boolean equalsIgnoreCase (String str) | 문자열과 String인스턴스의 문자열을 대소문자 구분없이 비교한다. | String s = “Hello” boolean b=s.equalsIgnoreCase(“HELLO”); b=true |
int indexOf(int ch) | 주어진 문자(ch)가 문자열에 존재하는지 확인하여 위치(index)를 알려준다. 못 찾으면 -1을 반환한다. | String s = “Hello” int idx1 = s.indexOf(‘o’) idx1=4 |
int indexOf(String str) | 주어진 문자(ch)가 문자열에 존재하는지 확인하여 위치(index)를 알려준다. 못 찾으면 -1을 반환한다. | String s =”ABCDEFG”; int idx=s.indexOf(“CD”); idx=2 |
String intern() | 문자열을 constatnt pool에 등록한다. 이미 contant pool에 같은 내용의 문자열이 있을 경우 그 문자열의 주소값을 반환한다. | String s = new String(“abc”); String s2 = new String(“abc”); boolean b = s.equals(s2); b=true |
int lastIndexOf(int ch) | 지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 위치(index)를 알려준다. 못찾으면 -1을 반환한다. | String s =”java.lang.java”; int idx=s.lastIndexOf(“.”); idx=9 |
int lastIndexOf(String str) | 지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 위치(index)를 알려준다. 못찾으면 -1을 반환한다. | String s =”java.lang.java”; int idx=s.lastIndexOf(“java”); idx=10 |
int length() | 문자열의 길이를 알려준다. | String s = “Hello”; int length=s.length(); length=5 |
String replace (char old, char nw) | 문자열 중의 문자열(old)를 새로운 문자(new)로 바꾼 문자열을 반환한다. | String s = “Hello”; String s = s.replace(‘H’,’C’); s="Cello" |
String replace(CharSequence old, CharSequence nw) | 문자열 중의 문자열(old)를 새로운 문자(new)로 모두 바꾼 문자열을 반환한다. | String s = “Hellollo”; String s = s.replace(“ll”,”LL); s="HeLLoLLo" |
String replaceAll(String regex, String replacement) | 문자열 중에서 지정된 문자열(regex)과 일치하는 것을 새로운 문자열(replacement)로 모두 변경한다. | String ab=”AABBAABB”; String r = s.replaceAll(“BB”,”bb”); r="AAbbAAbb" |
String replaceFirst(String regex, String replacement) | 문자열 중에서 지정된 문자열(regex)과 일치하는 것 중, 첫 번째 것만 새로운 문자열로 변경한다. | String ab=”AABBAABB”; String r = s.replaceFirst(“BB”,”bb”); r="AAbbAABB" |
String [] split(String regex) | 문자열을 지정된 분리자로 나누어 문자열 배열에 담아 반환한다. | String animals =”dog,cat,bear”; String[]arr = animals.split(“,”); arr = ["dog", "cat", "bear"] |
String [] split(String regex, int limit) | 문자열을 지정된 분리자로 나누어 문자열배열에 담아 반환한다. 단, 문자열 전체를 지정된 수로 자른다. | String animals =”dog,cat,bear”; String[]arr = animals.split(“,”,2); arr[0] = "dog" arr[1]= "cat, bear" |
boolean startsWith(String prefix) | 주어진 문자열로 시작하는지 검사한다. | string s=”java.lang.Object”; boolean b=s.startsWith(“java”); b=true |
String substring(int begin) String substring(int begin, int end) |
주어진 시작위치부터 끝 위치 범위에 포함된 문자열을 얻는다. 이 때, 시작위치의 문자는 범위에 포함되지만, 끝 위치의 문자는 포함되지 않는다. | string s=”java.lang.Object”; String c=s.substring(10); c="Object" |
String toLowerCase() | String 인스턴스에 저장되어있는 모든 문자열을 소문자로 변환하여 반환한다. | String s = “Hello”; String s1 = s.toLowerCase(); s1="hello" |
String toString() | String 인스턴스에 저장되어 있는 문자열을 반환한다. | String s = “Hello”; String s1 = s.toSting(); s1 = "Hello" |
String toUpperCase() | String 인스턴스에 저장되어있는 모든 문자열을 대문자로 변환하여 반환한다. | String s = “Hello”; String s1 = s.toUpperCase(); s1="HELLO" |
String trim() | 문자열의 왼쪽 끝과 오른쪽 끝에 잇는 공백을 없앤 결과를 반환한다. 이 때 문자열 중간에 있는 공백은 제거 되지 않는다. | String s = “ Hello World “; String s1 = s.trim(); s1 = "Hello World" |
static String valueOf() | 지정된 값을 문자열로 변환하여 반환한다. 참조변수의 경우, toString()을 호출한 결과를 반환한다. |
String s = String.valueOf(100);s = "100" |
문자열과 기본행간의 변환
StringBuffer클래스
StringBuffer클래스의 특징
StringBuffer클레스의 생성자와 메서드
Math클래스
wrapper클래스
Number클래스
숫자를 멤버변수로 갖는 클래스의 조상(추상클래스)
미션 🔥
행운의 로또번호 생성기
서로 격치지 않는(중복되지 않는 ) 숫자 6개 생성
각 숫자는 1~45 범위내의 숫자
매번 실행시 다른 숫자 출력
➡️랜덤수 : java.util.Random클래스 - nextInt(int bound)사용
다섯회 출력
각 번호는 오름차순 정렬
➡️java.util.Arrays클래스의 sort()메소드 사용.
출력
★★ 금주 행운의 로또번호 ★
2회: 1, 2, 9, 33, 42, 45
3회: 9, 12, 14, 19, 34, 40
4회: 5, 10, 15, 18, 19, 22
5회: 7, 9, 15, 19, 39, 41
package Mission;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
class L{
public Collection<? extends String> lottoGen() {
int[] randomNum = new int[6];
for (int i = 0; i < 6; i++) {
int newNum;
do {
newNum = (int) (Math.random() * 45) + 1;
} while (contains(randomNum, newNum));
randomNum[i] = newNum;
}
System.out.println(Arrays.toString(randomNum));
return null;
}
private static boolean contains(int[] randomNum, int newNum) {
for (int su : randomNum) {
if (su == newNum) {
return true;
}
}
return false;
}
}
public class LottoTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
L lot = new L();
list.addAll(lot.lottoGen());
}
}
컬렉션 프레임워크Collection Framework
-
java.util 패키지
-
다수의 데이터를 쉽게 처리하는 방법 제공
➡ DB 처럼 CRUD 기능 중요
-
-
collection framework 핵심 interface
interface 특징 List 입력 순서가 있는 데이터의 집합. 순서가 있으니까 데이터의 중복을 허락 ex) 일렬로 줄서기 ➡ ArrayList, LikedList
Set 입력 순서를 유지하지 않는 데이터의 집합. 순서가 없어서 같은 데이터를 구별할 수 없음, 중복❌ ex) 알파벳이 한 종류 씩 있는 주머니 ➡ HashSet, TreeSet
Map Key와 value의 쌍으로 데이터를 관리하는 집합. 순서는 없고 Key의 중복 불가, value는 중복가능 속성 - 값, 지역번호 - 지역 ➡ HashMap, TreeMap
댓글남기기