Object의 equals( )와 hashCode( ) 재정의 학번이 같으면 동등 객체
hashCode( )의 리턴값은 studentNum 필드 값의 해시코드를 리턴
선언
package sec01.exam02;
public class Student {
private String studentNum;
// 생성자 자동으로 만들기
public Student(String studentNum) {
super();
this.studentNum = studentNum;
}
// Getter / Setter / Setter만 Generate 자동으로 만들기
public String getStudentNum() {
return studentNum;
}
@Override // Generate -> hashCode() or equals()자동으로 만들기
public int hashCode() {
// TODO Auto-generated method stub
return studentNum.hashCode();
}
@Override // Generate -> hashCode() or equals()자동으로 만들기
public boolean equals(Object obj) {
if(obj instanceof Student) {
Student student = (Student) obj;
if(studentNum.equals(student.studentNum)) {
return true;
}
}
return false;
}
}
실행
package sec01.exam02;
import java.util.HashMap;
public class StudentEx {
public static void main(String[] args) {
// 제네릭 사용
HashMap<Student, String> hashMap = new HashMap<Student, String>();
hashMap.put(new Student("1"), "95");
String score = hashMap.get(new Student("1"));
System.out.println("1번 학생의 총점:" + score);
}
}
<결과>
1번 학생의 총점:95
자동 완성 기능( 주석 확인 ) 제네릭, hashMap 사용
<Student, String>이라는 제네릭 타입이 명시
HashMap의 키(key)로 Student 객체를, 값(value)으로는 String 객체를 가지는 맵을 선언
HashMap의 put 메서드에 ( "1") 키 값은 "95" 저장 score 변수에 ( "1" )키값 저장 후 호출하면 95출력
객체 문자 정보( toString( ) )
package sec01.exam03;
//import java.sql.Date;
import java.util.Date;
public class ToStringEx {
public static void main(String[] args) {
Object obj1 = new Object();
Date obj2 = new Date();
System.out.println(obj1);
System.out.println(obj2);
}
}
<결과>
java.lang.Object@34ce8af7
Fri Jun 16 20:24:02 KST 2023
System.out.println(obj2); 출력 할 때 System.out.println(obj2.toString()); 이거랑 동일 ( 생략가능 )
객체 문자 정보( toString( ) 메소드 )
선언
package sec01.exam03;
public class SmartPhone {
private String company;
private String os;
//생성자 자동 생성
public SmartPhone(String company, String os) {
super();
this.company = company;
this.os = os;
}
@Override // toString() 자동 생성
public String toString() {
return "SmartPhone [company=" + company + ", os=" + os + "]";
}
// public String toString() {
// return company + "," + os;
// }
}
실행
package sec01.exam03;
public class SmartPhoneEx {
public static void main(String[] args) {
SmartPhone myPhone = new SmartPhone("구글", "안드로이드");
String strObj = myPhone.toString();
System.out.println(strObj);
System.out.println(myPhone);
}
}
<결과>
SmartPhone [company=구글, os=안드로이드]
SmartPhone [company=구글, os=안드로이드]
해당 코드는 선언부 쪽에서 toString( ) 메서드 오버라이딩 안하면 밑에 처럼 주소값 출력 됨
sec01.exam03.SmartPhone@3b6eb2ec
sec01.exam03.SmartPhone@3b6eb2ec
위 이미지처럼 메소드 호출 과정이 중요한거 같다.
Class 클래스
자바는 클래스와 인터페이스의 메타 데이터를 java.lang 패키지에 소속된 Class 클래스로 관리한다.
여기서 메타 데이터란 클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보를 말한다.
package sec01.exam05;
class Car{}
public class ClassEx {
public static void main(String[] args) throws ClassNotFoundException {
// 첫번째 방법 ( 클래스의 대한 정보 )
Class clazz = Car.class;
System.out.println(clazz.getName());// sec01.exam05.Car
System.out.println(clazz.getPackage());// package sec01.exam05
Class clazz2 = Class.forName("sec01.exam05.Car");
System.out.println(clazz2.getName());
}
}
<결과>
sec01.exam05.Car
package sec01.exam05
sec01.exam05.Car
해당 코드를 사용하면 Class 객체 정보를 얻을 수 있음
람다식 사용 해보기
package sec01.exam05;
interface MyInterface{
String method(String str);
}
public class MyInterfaceEx {
public static void main(String[] args) {
// 익명의 객체생성
MyInterface mi = new MyInterface() {
@Override
public String method(String str) {
// TODO Auto-generated method stub
return str+100;
}
};
String num = mi.method("홍");
System.out.println(num);
// 람다식
mi = (a) -> {return a+100;};
num = mi.method("홍");
System.out.println(num);
// 람다식
// mi = () -> {System.out.println("my1");};
// mi.method();
}
}
<결과>
홍100
홍100
람다식은 공부하고 있는 교재에 없어서 강사님이 틈틈히 사용해보라고 하신다 ㅋㅋ
★★★★ArrayList★★★★
오늘 배운 거중에서 제일 사용 많이 할 거 같고 유용한 API
클래스 배열 배울 때는 사용방법도 복잡하고 했는데 ArrayList와 향상된 for문 사용하면 쉽고
간편하게 사용이 가능할 것 같다.
밑에 코드 활용해서 연습하면 좋을 것 같다.
package sec01.exam06;
import java.util.ArrayList;
import java.util.List;
public class ArrayListEx {
public static void main(String[] args) {
List<String> List = new ArrayList<String>();
List.add("java");
List.add("JDBC");
List.add("Servlet/JSP");
List.add(2, "Database");
List.add("iBATIS");
int size = List.size();
System.out.println("총 객체수:" + size);
System.out.println();
String skill = List.get(2);
System.out.println("2: " + skill);
System.out.println();
//향상된 for문
for (String str : List) {
System.out.println(str);
} // 아래 for문과 동일
// for(int i=0; i<List.size(); i++) {
// String str = List.get(i);
// System.out.println(i + ":" + str);
// }
System.out.println();
List.remove(2);
List.remove(2);
List.remove("iBATIS");
for(int i=0; i<List.size(); i++) {
String str = List.get(i);
System.out.println(i + ":" + str);
}
}
}
<결과>
총 객체수:5
2: Database
java
JDBC
Database
Servlet/JSP
iBATIS
0:java
1:JDBC
★★★★ArrayList_DB 값 가져오기★★★★
선언
package arrayList0616;
public class Person {
int id;
String name;
String addr;
String phone;
public Person(int id, String name, String addr, String phone) {
super();
this.id = id;
this.name = name;
this.addr = addr;
this.phone = phone;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", addr=" + addr + ", phone=" + phone + "]";
}
}
실행
package arrayList0616;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class PersonEx {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:mariadb://localhost:3307/jspdb";
String user = "root";
String pass = "maria";
Class.forName("org.mariadb.jdbc.Driver");
System.out.println("드라이버 로딩!");
Connection con = DriverManager.getConnection(url, user, pass);
System.out.println("접속 성공!");
List<Person> list = new ArrayList<>();
String sql = "select * from person";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String addr = rs.getString("addr");
String phone = rs.getString("phone");
Person ps = new Person(id, name, addr, phone);
list.add(ps);
}
for(Person str : list) {
System.out.println(str);
}
// Person person1 = new Person(1, "홍", "서울", "010-1234-5678");
// list.add(person1);
// Person person2 = new Person(2, "김", "경기", "010-2234-5678");
// list.add(person2);
// Person person3 = new Person(3, "박", "부산", "010-3234-5678");
// list.add(person3);
}
}
<결과>
드라이버 로딩!
접속 성공!
Person [id=7, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=8, name=김정순, addr=서울 마포구, phone=010-9392-9323]
Person [id=9, name=김정지, addr=서울 마포구, phone=]
Person [id=33, name=김신, addr=서울 마포구, phone=010-2222-2222]
Person [id=34, name=김길순, addr=서울 마포구, phone=010-1234-5678]
Person [id=35, name=인설트, addr=마리아 디비, phone=010-2222-3333]
Person [id=36, name=김기덕, addr=서울시 영등포구, phone=010-3232-3323]
Person [id=37, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=38, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=39, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=40, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=41, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=42, name=홍길동ㅇ, addr=서울 서대문구, phone=010-1111-1111]
Person [id=43, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=44, name=홍길도, addr=광명시, phone=010]
Person [id=45, name=김기철, addr=경기도, phone=010-222-3333]
Person [id=46, name=김기철, addr=경기도, phone=010-222-3333]
Person [id=47, name=홍기동, addr=부산 연제구, phone=010-4444-4444]
Person [id=48, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=49, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=50, name=null, addr=null, phone=null]
Person [id=51, name=null, addr=null, phone=null]
Person [id=52, name=null, addr=null, phone=null]
Person [id=53, name=김정차, addr=서울 마포구, phone=010-9392-9323]
Person [id=54, name=김정차, addr=서울 마포구, phone=010-9392-9323]
Person [id=55, name=김정차, addr=서울 마포구, phone=010-9392-9323]
Person [id=56, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=57, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=58, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=59, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=60, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=61, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=62, name=김스기, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=63, name=김스기, addr=스캔시 스캔구, phone=010-5000-3000]
해당 코드는 JDBC를 사용하여 데이터베이스에서 Person 정보를 조회하여 ArrayList에 저장하는 예제
List<Person> list = new ArrayList<>();: Person 객체를 저장할 ArrayList를 생성 ( 제네릭 사용 )
향상된 for문 사용
for (Person str : list) { ... }: ArrayList의 list변수 모든 요소를 반복하면서 Person str 변수에 저장
System.out.println(str);: Person str 변수에 있는 객체를 출력합니다.
Person 클래스의 toString() 메서드가 호출됩니다.( toString() 사용안하면 출력결과 이상하게 나옴 )
'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글
2023-06-20 23일차 (0) | 2023.06.20 |
---|---|
JDBC_설정(MariaDB, 이클립스) (1) | 2023.06.17 |
2023-06-15 20일차 (0) | 2023.06.15 |
2023-06-14 19일차 (0) | 2023.06.14 |
2023-06-13 18일차 (0) | 2023.06.13 |