package com.sist.lib;
/*
1. 모든 클래스에 상속을 내린다ㅏ.
2. Object는 가장 큰 데이터형 => 모든 데이터 값을 받을 수 있다.
3. 모든 객체가 사용할 수 있는 기능을 제공
4. java.lang => Object외에 다른 클래스는 final이다
-------------------
상속을 받아서 변경이 불가능
5. Object
------
finalize()/clone()/toString()/hashCode()/equals()
-------------------------------------------------
상속
---
| 상위 클래스는 하위 클래스에 추가된 메소드, 변수는 접근이 불가능
=> 오버라이딩된 변수 / 메소드만 사용이 가능
toString() : 문자열 변환 / 객체의 정보 확인
---------- 멤버변수 확인 => 오버라이딩
--------
상위 클래스로 객체를 선언
=> 오버라이딩된 메소드 호출이 가능
class A
class B extends A
A a=new B() => 동적 바인딩
-------
A가 가지고 있는 메소드 => 오버라이딩된 메소드 호출
----- 주소
-A가 가지고 있는 변수 : 주소가 없다
*일반 변수는 주소가 없고 / 메소드는 주소가 있음
=> 정적 바인딩
*/
import java.awt.event.*;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class 라이브러리_Object_1 extends JFrame implements ItemListener {
JComboBox box = new JComboBox();
JLabel la = new JLabel();
public 라이브러리_Object_1() {
box.addItem("홍길동:남자");
box.addItem("심청이:여자");
box.addItem("이소룡:남자");
box.addItem("김영희:여자");
setLayout(null);
box.setBounds(10, 15, 100, 35);
add(box);
la.setBounds(10, 100, 300, 35);
add(la);
setSize(400, 200);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// Object는 출력은 가능 => 문자열 제어 불가능
// => Object => 매개변수 , Object => 리턴형
// 사용시에는 반드시 형변환
box.addItemListener(this);
}
public static void main(String[] args) {
new 라이브러리_Object_1();
}
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == box) {
// Object obj=box.getSelectedItem();
// String obj=(String)box.getSelectedItem(); =같은거임
// String obj = box.getSelectedItem().toString();
// String[] datas = obj.split(":");
//
// la.setText("이름:" + datas[0] + ",성별:" + datas[1]);
}
}
}
package com.sist.lib;
/*
finalize() => 소멸자 함수 => 객체가 메모리에서 해제 => 자동 호출
*/
class Sawon // extends Object 모든 클래스는 Object를 상속하고 있음
{
private int sabun;
private String name;
public Sawon() {
sabun = 1;
name = "홍길동";
System.out.println("객체 생성 = 초기화 완료");
}
public void print() {
System.out.println("사번 : " + sabun);
System.out.println("이름 : " + name);
}
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println("사원 객체 소멸: Heap에서 사라진다");
}
// 소멸 여부 확인
}
public class 라이브러리_Object_2 {
public static void main(String[] args) {
Sawon sa = new Sawon();
sa.print();
sa = null;
// 직접 해제
System.gc(); // 가비지 컬렉션 호출
}
}
package com.sist.lib;
/*
객체 복제
= 같은 메모리 주소 사용 (같이 사용) => 얕은 복사
A a=new A()
A b=a => 주소 참조
= 다른 메모리 주소 사용 (따라 사용 ) => 깊은 복사
A a=new A()
A b=a.clone() => 새로운 메모리 생성
*/
class Member {
private int mno;
private String name;
public Member(int mno, String name) {
this.mno = mno;
this.name = name;
}
public int getMno() {
return mno;
}
public void setMno(int mno) {
this.mno = mno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 메모리를 통째로 복사해서 새로운 메모리에 저장
// 스프링 => prototype
// 디자인패턴 => prototype 패턴
// GOF패턴 => 23가지
// 8=> 컴바운드패턴
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
// 오버라이딩 => clone() => 재정의
public void print() {
System.out.println("회원번호:" + mno);
System.out.println("이름:" + name);
}
}
public class 라이브러리_Object_3 {
public static void main(String[] args) throws Exception{
// 얕은 복사 => 두개의 객체를 한개 주소에서 처리
Member m1 = new Member(1, "홍길동");
// m1.print();
// Member m2 = m1;
// m2.print();
// m2.setMno(3);
// m2.setName("박문수");
// m2.print();
// m1.print();
// // 객체가 가지고 있는 주소가 같으면 => 같은 메모리를 제어
// System.out.println("m1:"+m1);
// System.out.println("m2:"+m2);
//
Member m2=(Member)m1.clone();
m2.print();
System.out.println("m1:"+m1);
System.out.println("m2:"+m2);
m2.setMno(3);
m2.setName("박문수");
m2.print();
}
}
package com.sist.lib;
class Sawon2 {
private int sabun;
private String name;
public int getSabun() {
return sabun;
}
public void setSabun(int sabun) {
this.sabun = sabun;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 초기화
public Sawon2(int sabun, String n) {
this.sabun = sabun;
name = n;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
Sawon2 s=(Sawon2)obj;
return name.equals(s.name)&& sabun==s.sabun;
}
}
public class 라이브러리_Object_4_1 {
public static void main(String[] args) {
Sawon2 s1 = new Sawon2(1, "홍길동");
Sawon2 s2 = new Sawon2(1, "홍길동");
// equals 재정의가 없는 경우 => 주소비교
// equals 재정의할 경우 => String 비교
if (s1.equals(s2)) {
System.out.println("같은 사원입니다.");
} else {
System.out.println("다른 사원입니다.");
}
}
}
package com.sist.lib;
/*
equals() => Object에서 객체 비교
String => equals() 문자열 비교 => 오버라이딩
*/
class Human{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Human(String n) {
name=n;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(obj instanceof Human) {
Human s=(Human)obj;
return name==s.name;
}else
{
return false;
}
}
}
public class 라이브러리_Object_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Human h1=new Human("홍길동");
Human h2=new Human("홍길동");
if(h1.equals(h2)) {
System.out.println("같다");
}else {
System.out.println("다르다");
}
}
}
package com.sist.lib;
import java.util.ArrayList;
class Movie {
private int mno;
private String title;
public int getMno() {
return mno;
}
public void setMno(int mno) {
this.mno = mno;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Movie(int mno, String title) {
this.mno=mno;
this.title=title;
}
}
public class 라이브러리_Object_5_1 {
public static void main(String[] args) {
//
// ArrayList<Movie> list=new ArrayList<Movie>();
// list.add(new Movie(1,"홍길동전"));
// list.add(new Movie(2,"심청전"));
//
// Movie m1=(Movie)list.get(0);
Movie m1=new Movie(1,"홍길동전");
System.out.println(m1.getClass()); //데이터형
String s="";
System.out.println(s.getClass());
}
}
package com.sist.lib;
/*
*/
import java.util.Objects;
class Member2 {
private int mno;
private String name;
public int getMno() {
return mno;
}
public void setMno(int mno) {
this.mno = mno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 초기화
public Member2(int mno, String name) {
this.mno = mno;
this.name = name;
}
public void print() {
System.out.println("회원번호:" + mno);
System.out.println("이름:" + name);
}
@Override
public int hashCode() {
return Objects.hash(mno, name);
}
}
public class 라이브러리_Object_5 {
public static void main(String[] args) {
Member2 m1 = new Member2(1, "박문수");
Member2 m2 = new Member2(1, "박문수");
System.out.println(m1);
System.out.println(m2);
System.out.println(m1.hashCode());
System.out.println(m2.hashCode());
if(m1==m2) {
System.out.println("같다");
}else {
System.out.println("다르다");
}
}
}