2주차 12/05(월)

하이·2022년 12월 5일
1

수업

목록 보기
2/41
post-custom-banner

Java의 주요 class

Object class

: Java의 최상위 class

: 생성자, field, method

: Java API Reference(web)

https://docs.oracle.com/javase/8/docs/api/

- 기억해야하는 method

① equals( )

: 객체를 비교하는 용도로 사용

② toString( )

: 객체(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 실행


Primitive type의 비교

: == 연산자를 이용

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
		
	}	
}//

String class

Java primitive data type

: 총 8개

: 정수 <byte, short, int, long>

: 실수 <float, double>

: char -> 문자 (' ') 한글자

: boolean -> 논리(true, false)

reference data type

문자열 -> (" ")

: 문자열은 객체(instance) => String class

: 당연히 field, method 가 존재함

String a = new 생성자

Stirng a = new String("안녕");

String b ="안녕";=> 편하게 쓰도록 제공
String c ="안녕";

string의 특징 (또다른)

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;
	}	
}//

Array(배열)

: 집합자료 구조 중 하나
: 거의 대부분의 프로그래밍언어가 가지고 있는 기본 자료 구조

① 여러개의 연속적인 저장 공간 (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만 저장 가능
② 크기가 고정되어 있음
=> 사용이 불편함

ArrayList

: 라는 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라서 오류!
				
	}
	
}//

profile
기록의 즐거움 😆💻
post-custom-banner

0개의 댓글