: Java의 최상위 class
: 생성자, field, method
: Java API Reference(web)
https://docs.oracle.com/javase/8/docs/api/
: 객체를 비교하는 용도로 사용
: 객체(instance)를 문자열로 표현할 때 사용
<Java주요Class설명> 프로젝트 생성
equals()
package com.test;
//import java.lang.*; // 기본으로 삽입됨
public class Student{
// constructor
public Student() {
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
// field
private String name;
private int age;
// method
// getter & setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}//
package com.test;
public class Main {
public static void main(String[] args) {
Student s1 = new Student("홍길동", 20);
Student s2 = new Student("신사임당", 30);
Student s3 = new Student("홍길동", 20);
// 두 객체가 같은 객체인가요?
// 1. 진짜 두개의 instance가 같은 메모리 공간을 공유하고 있나요?
// 2. instance의 내용이 같은가요?
// 일반적으로 똑같니? => 이 연산자는 "==" 를 사용 => 비교연산자
// 이 연산의 결과는 true, false 논리값으로 결과가 리턴됨
System.out.println(s1 == s2); // false
System.out.println(s1 == s3); // false 메모리주소값은 다름
System.out.println(s1.equals(s3)); // false
}
}//
equasl 재정의 후
override 이용
package com.test;
//import java.lang.*; // 기본으로 삽입됨
public class Student{
// constructor
public Student() {
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
// field
private String name;
private int age;
// method
@Override
public boolean equals(Object obj) {
// equals method의 기능을 재 정의
// instance의 이름과 나이가 같으면 같다 라고 새롭게 만들거에요
Student target = (Student)obj;
boolean result = false;
if((this.name == target.name) &&
(this.age == target.age)) {
result = true;
}
return result;
}
// getter & setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}//
Main.class 실행
: == 연산자를 이용
Reference type(class type=instance)의 비교
: equals( ) method를 이용
: ㄴObject class가 상속해주는 method
: 만약 overriding 하지 않으면 ==와 같다
toString
객체(instance)를 문자열로 변환
: 기본 기능 : memory 주소값(시작주소)의 Hash값을 문자열로 변환
student.class에 toString 오버라이딩 후
package com.test;
//import java.lang.*; // 기본으로 삽입됨
public class Student{
// constructor
public Student() {
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
// field
private String name;
private int age;
// method
@Override
public boolean equals(Object obj) {
// equals method의 기능을 재 정의
// instance의 이름과 나이가 같으면 같다 라고 새롭게 만들거에요
Student target = (Student)obj;
boolean result = false;
if((this.name == target.name) &&
(this.age == target.age)) {
result = true;
}
return result;
}
@Override
public String toString() {
return this.name + ", " + this.age;
}
// getter & setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}//
package com.test;
public class Main {
public static void main(String[] args) {
Student s1 = new Student("홍길동", 20);
Student s2 = new Student("신사임당", 30);
Student s3 = new Student("홍길동", 20);
// 두 객체가 같은 객체인가요?
// 1. 진짜 두개의 instance가 같은 메모리 공간을 공유하고 있나요?
// 2. instance의 내용이 같은가요?
// 일반적으로 똑같니? => 이 연산자는 "==" 를 사용 => 비교연산자
// 이 연산의 결과는 true, false 논리값으로 결과가 리턴됨
System.out.println(s1 == s2); // false
System.out.println(s1 == s3); // false 메모리주소값은 다름
System.out.println(s1.equals(s3)); // false , 재정의 후 true
System.out.println(s1.toString()); // com.test.Student@ee7d9f1
}
}//
: 총 8개
: 정수 <byte, short, int
, long>
: 실수 <float, double
>
: char -> 문자 (' ') 한글자
: boolean -> 논리(true, false)
문자열 -> (" ")
: 문자열은 객체(instance) => String
class
: 당연히 field
, method
가 존재함
String a = new 생성자
Stirng a = new String("안녕");
String b ="안녕";=> 편하게 쓰도록 제공
String c ="안녕";
immutable(불변의)
mutable(가변의)
string a = new string("hello")
string b = "hello"
string c = "hello"
b=b+"kk"
한번 string pool에 박힌 문자열은 변하지 않는다
package com.test;
//import java.lang.*; // 기본으로 삽입됨
public class Student{
// constructor
public Student() {
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
// field
private String name;
private int age;
// method
@Override
public boolean equals(Object obj) {
// equals method의 기능을 재 정의
// instance의 이름과 나이가 같으면 같다 라고 새롭게 만들거에요
Student target = (Student)obj;
boolean result = false;
// if((this.name == target.name) &&
if((this.name.equals(target.name)) &&
(this.age == target.age)) {
result = true;
}
return result;
}
@Override
public String toString() {
return this.name + ", " + this.age;
}
// getter & setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}//
: 집합자료 구조 중 하나
: 거의 대부분의 프로그래밍언어가 가지고 있는 기본 자료 구조
① 여러개의 연속적인 저장 공간 (dense array)
② 배열은 객체이다 (Heap에 존재)
=> new를 이용해서 생성 / but 생성자는 없음
③ 배열 사용은 당연히 index(첨자)를 이용
: index는 0부터 시작 => 반복쿼리할 때 편함
④ 각각의 저장 공간은 같은 Data Type을 가짐
⑤ 한번 배열이 생성되면 크기를 조절할 수 없음
두가지 방법으로 사용 가능
int a = 10; int[ ]a = new int[4] int a[ ] = new int[4]
① 같은 data type만 저장 가능
② 크기가 고정되어 있음
=> 사용이 불편함
: 라는 class
: Java.util.package에 존재
① 서로 다른 data type에 데이터 저장 가능 !
② 생긴 건 배열과 유사함(연속적인 집합 자료 구조)
③ 크기가 고정되어 있지 않음
④ 이 안에는 Reference type(instance)만 저장 가능
: primitive type은 저장 불가 => 해결해야 함
ArrayListTest.class 생성
control shift 5 맥북 찾아보기(자동 import)
Java는 Wrapper Class를 제공함
primitive | <-> | wrapper class |
int | <-> | Integer |
int k=100; //primitive type
Integer k = new Integer();
자동으로 autoboxing이 일어남
ArrayList가 사용되는 걸 가만히 보니 : 거의 대부분 같은 DataType을 쓰더라
원래는 다른 DataType들이 ArrayList 안에 마구마구 나오는데,
이를 하나로 고정시키자!
=> generic
을 이용 (Data Type을 표현해주자)
package com.test;
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
// ArrayList를 생성해 보자
ArrayList<Object> a = new ArrayList<Object>(); //Object가 최상위 객체라서 generic을 Object로. string과 int가 둘 다 있음
a.add("Hello");
a.add(new Student("홍길동",20));
// a.add(new Integer(100)); //error는 아니지만 웬만하면 쓰지말라는 표시가 뜸
a.add(100); //auto Boxing이 발생하고 사용하는 class는 Integer
a.add(3.14); //Double class를 사용.
//통칭해서 wrapper class ??
ArrayList<String> b = new ArrayList<String>();
b.add("Hello");
b.add("홍길동");
b.add(new String("소리없는 아우성!"));
b.add(100); //String이 아닌 int라서 오류!
}
}//