1. java.lang.Object class
- 상속 관계에 있어 모든 클래스의 최상위 class이다.
- 2개의 주요한 method 제공
- equals()
- 비교 : 메모리 위치가 같은 것인지, 의미 상 같은 것인지 비교가 다르다.
- == : 메모리 값 비교
- equals 를 오버라이딩하지 않으면 메모리 주소 값을 비교한다.
@Override public boolean equals(Object obj) { //인자로 들어온 객체 - Object ( 모든 객체가 들어올 수 있다.) // 인자로 들어온 인스턴스가 equals method를 가지고 있는 인스턴스의 내용과 같으면 같은 객체로 판별하는 로직 // 두 인스턴스의 데이터 타입이 같아야 하기 때문에 맞춰주어야 한다. Student target = (Student) obj; if(this.getName() == target.getName()&& this.getAge()== target.getAge()) { return true; } return false; }
- toString()
- 객체를 문자열로 변환시키는 함수.
- 객체 ( 메모리공간 ) → 문자열로???
- 메모리 주소의 해시코드를 찍는다 ( 객체의 시작주소를 찍음)
@Override public String toString() { return this.getName() + ":" + this.getAge(); } // s1을 출력시 다음과 같은 형태로 출력해줌.
- equals()
2. String class
- java는 8개의 primitive 데이터 타입을 제공.
- 문자열은 기본 타입으로 제공되지 않는다. reference type으로 제공. class로 제공됨.
- 문자열 literal 을 제공한다. ( 표현 방식을 제공함)
String a = new String("문자");
// 너무 불편하다 -> 다음과 같이
String b = "문자열";
String c = "문자열";
String d = new String("문자");
b = "바꾼문자";
- b처럼 만든다 → heap 에 String pool에 들어감.
- a처럼 만든다 → heap에 만들어짐.(객체가 올라감) - 다른 객체를 계속해서 만들어냄.
graph LR
subgraph heap
subgraph StringPool
z[문자열]
abc[바뀐문자]
end
q[new String-문자]
m[new String- 문자]
end
subgraph stack
a[b]-->abc
w[c]-->z
ab[a]-->q
ac[d]-->m
end
- 문자열 비교는 equals()를 사용한다. ( StringPool 내의 메모리를 비교)
- immutable ( 불변의 )
- 값을 바꾸면 참조하는 값을 바꾼다.
3. Array
- 배열은 같은 데이터 타입을 여러개 저장할 수 있는 집합형 자료구조
- 기호는 [] 를 이용. 저장 순서가 존재.Index 개념이 존재한다.
- 배열은 instance 이고, 특수한 형태로 생성을 한다.
int a = 100;
int [] arr = new int[6];
4. ArrayList class
- 특수한 interface를 구현하고 있다 → list 인터페이스를 구현하고 있다.
- 객체면 다 들어올 수 있다.
- ArrayList객체를 만들어서 사용해 보자.
- List계열은 객체면 type에 상관없이 다 저장이 가능하다.
- 다른 reference data type을 저장할 수 있다.
- 꺼낼 때도 casting 해서 원래 타입으로 바꿔주는 것이 좋다. → 속도가 느리다.
- 실제 구현하다 보면 같은 데이터 타입을 이용해서 사용하게 됨 - generics
package collections;
import java.util.ArrayList;
import java.util.List;
class MyStudent{
@Override
public String toString() {
return "student";
}
}
public class ArrayListTest {
public static void main(String[] args) {
// ArrayList객체를 만들어서 사용해 보자.
// List계열은 객체면 type에 상관없이 다 저장이 가능하다.
// 다른 reference data type을 저장할 수 있다.
// 실제 구현하다 보면 같은 데이터 타입을 이용해서 사용하게 됨 - generics
List list = new ArrayList();
list.add("1번");
list.add(new MyStudent());
list.add(100); // int 형태의 primitive type. 원칙적으로 들어갈 수 없다.
// java에는 primitive type에 각각 대응되는 wrapper 클래스가 존재한다.
// list.add(100) -> list.add(new Integer(100));
for (Object o : list) {
System.out.println(o);
}
}
}
/*
1번
student
100
*/
- boxing 이라는 표현을 사용한다. ( primitive → wrapper )
- 자동으로 해줌 → auto boxing
5. HashMap class
- key 와 value로 이루어진 집합형 자료구조.
- 순서가 없다. key 값으로 value 에 access.
package collections;
import java.util.HashMap;
import java.util.Map;
public class HashMapTest {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("one", "hyundai");// 저장.
System.out.println(map.get("one")); // 키값으로 가져오기
}
}
6. HashSet
- set은 바구니 같은 자료구조
- 저장되는 순서가 없다. 중복 값이 없다
package collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetTest {
public static void main(String[] args) {
Set<String> setTest = new HashSet<>();
setTest.add("a");
setTest.add("a");
setTest.add("b");
Iterator<String> iter = setTest.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
- iterator : 순서의 개념은 없다. 그저 다음이 있는지 파악하는 것.
'Java' 카테고리의 다른 글
Java 문자열 처리 (0) | 2024.04.04 |
---|---|
Java 객체지향 3 (0) | 2024.04.04 |
JAVA 예외처리, Thread (0) | 2024.04.04 |
JAVA 객체지향 (0) | 2024.04.02 |
인프런 워밍업 클래스 5일차 과제 (0) | 2024.02.23 |
1. java.lang.Object class
- 상속 관계에 있어 모든 클래스의 최상위 class이다.
- 2개의 주요한 method 제공
- equals()
- 비교 : 메모리 위치가 같은 것인지, 의미 상 같은 것인지 비교가 다르다.
- == : 메모리 값 비교
- equals 를 오버라이딩하지 않으면 메모리 주소 값을 비교한다.
@Override public boolean equals(Object obj) { //인자로 들어온 객체 - Object ( 모든 객체가 들어올 수 있다.) // 인자로 들어온 인스턴스가 equals method를 가지고 있는 인스턴스의 내용과 같으면 같은 객체로 판별하는 로직 // 두 인스턴스의 데이터 타입이 같아야 하기 때문에 맞춰주어야 한다. Student target = (Student) obj; if(this.getName() == target.getName()&& this.getAge()== target.getAge()) { return true; } return false; }
- toString()
- 객체를 문자열로 변환시키는 함수.
- 객체 ( 메모리공간 ) → 문자열로???
- 메모리 주소의 해시코드를 찍는다 ( 객체의 시작주소를 찍음)
@Override public String toString() { return this.getName() + ":" + this.getAge(); } // s1을 출력시 다음과 같은 형태로 출력해줌.
- equals()
2. String class
- java는 8개의 primitive 데이터 타입을 제공.
- 문자열은 기본 타입으로 제공되지 않는다. reference type으로 제공. class로 제공됨.
- 문자열 literal 을 제공한다. ( 표현 방식을 제공함)
String a = new String("문자");
// 너무 불편하다 -> 다음과 같이
String b = "문자열";
String c = "문자열";
String d = new String("문자");
b = "바꾼문자";
- b처럼 만든다 → heap 에 String pool에 들어감.
- a처럼 만든다 → heap에 만들어짐.(객체가 올라감) - 다른 객체를 계속해서 만들어냄.
graph LR
subgraph heap
subgraph StringPool
z[문자열]
abc[바뀐문자]
end
q[new String-문자]
m[new String- 문자]
end
subgraph stack
a[b]-->abc
w[c]-->z
ab[a]-->q
ac[d]-->m
end
- 문자열 비교는 equals()를 사용한다. ( StringPool 내의 메모리를 비교)
- immutable ( 불변의 )
- 값을 바꾸면 참조하는 값을 바꾼다.
3. Array
- 배열은 같은 데이터 타입을 여러개 저장할 수 있는 집합형 자료구조
- 기호는 [] 를 이용. 저장 순서가 존재.Index 개념이 존재한다.
- 배열은 instance 이고, 특수한 형태로 생성을 한다.
int a = 100;
int [] arr = new int[6];
4. ArrayList class
- 특수한 interface를 구현하고 있다 → list 인터페이스를 구현하고 있다.
- 객체면 다 들어올 수 있다.
- ArrayList객체를 만들어서 사용해 보자.
- List계열은 객체면 type에 상관없이 다 저장이 가능하다.
- 다른 reference data type을 저장할 수 있다.
- 꺼낼 때도 casting 해서 원래 타입으로 바꿔주는 것이 좋다. → 속도가 느리다.
- 실제 구현하다 보면 같은 데이터 타입을 이용해서 사용하게 됨 - generics
package collections;
import java.util.ArrayList;
import java.util.List;
class MyStudent{
@Override
public String toString() {
return "student";
}
}
public class ArrayListTest {
public static void main(String[] args) {
// ArrayList객체를 만들어서 사용해 보자.
// List계열은 객체면 type에 상관없이 다 저장이 가능하다.
// 다른 reference data type을 저장할 수 있다.
// 실제 구현하다 보면 같은 데이터 타입을 이용해서 사용하게 됨 - generics
List list = new ArrayList();
list.add("1번");
list.add(new MyStudent());
list.add(100); // int 형태의 primitive type. 원칙적으로 들어갈 수 없다.
// java에는 primitive type에 각각 대응되는 wrapper 클래스가 존재한다.
// list.add(100) -> list.add(new Integer(100));
for (Object o : list) {
System.out.println(o);
}
}
}
/*
1번
student
100
*/
- boxing 이라는 표현을 사용한다. ( primitive → wrapper )
- 자동으로 해줌 → auto boxing
5. HashMap class
- key 와 value로 이루어진 집합형 자료구조.
- 순서가 없다. key 값으로 value 에 access.
package collections;
import java.util.HashMap;
import java.util.Map;
public class HashMapTest {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("one", "hyundai");// 저장.
System.out.println(map.get("one")); // 키값으로 가져오기
}
}
6. HashSet
- set은 바구니 같은 자료구조
- 저장되는 순서가 없다. 중복 값이 없다
package collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetTest {
public static void main(String[] args) {
Set<String> setTest = new HashSet<>();
setTest.add("a");
setTest.add("a");
setTest.add("b");
Iterator<String> iter = setTest.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
- iterator : 순서의 개념은 없다. 그저 다음이 있는지 파악하는 것.
'Java' 카테고리의 다른 글
Java 문자열 처리 (0) | 2024.04.04 |
---|---|
Java 객체지향 3 (0) | 2024.04.04 |
JAVA 예외처리, Thread (0) | 2024.04.04 |
JAVA 객체지향 (0) | 2024.04.02 |
인프런 워밍업 클래스 5일차 과제 (0) | 2024.02.23 |