강의/KOSTA

[Java] Basic API (Day7)

덩이 2022. 3. 14. 23:01

위 글은 해당 카테고리의 수업 강의 자료를 정리한 것입니다.

 

개요

  • 자바 프로그램에서 가장 많이 사용되는 패키지
  • import를 사용하지 않아도 자동으로 포함

 

  1. Object Class
  • 모든 클래스의 최상위 클래스
  • 명시적 extends java.lang.Object 없이도 자동으로 상속받게 됨

public class PointApp{
	public static void main(String[] args){
    	Point a = new Point(2,3);
        
        System.out.println(a.hashCode());
        System.out.println(a.getClass());
        System.out.println(a.getClass().getName());
        System.out.println(a.toString());
        System.out.println(a);
    }
}
public class Point{
	private int x;
    private int y;
    public Point(int x, int y){
    	this.x=x;
        this.y=y;
    }
}

 

 

1.1 toString()

Object의 toString: getClass().getName() + "@" + Integer.toHexString(hashCode())

 

 

 

1.2 equals()

  • 두 객체의 비교시 == 와 Object 클래스의 equals() 메소드를 사용함
  • == 와 equals()의 상당한 차이점이 있음
    • == 참조 변수 값 비교
    • equals() 정의한 값 비교 ➡️ 재정의해서 사용
  • 참조 변수 값을 먼저 비교
    • 참조 변수 값이 같으면 두 객체는 같은 것
    • 참조 변수 값이 다르면 두 객체의 속성 값을 비교함
public class Point {
	
	private int x;
	private int y;
	
	public Point() {
		
	}
	
	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	// equals로 들어온 객체는 다운캐스팅
	public boolean equals(Object obj) {
		Point p = ((Point)obj);
		if(this.hashCode() == p.hashCode()) {
			return true;
		}else if(this.x == p.x && this.y == p.y) {
			return true;
		}else {
			return false;
		}
	}

}
public class PointApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Point a = new Point(2,3);
		Point b = new Point(10,5);
		Point c = new Point(2,3);
		Point d = a;
		
		System.out.println(a.hashCode());
		System.out.println(a.getClass());
		System.out.println(a.getClass().getName());
		System.out.println(a.toString());
//		System.out.println(a);
		
		System.out.println(a.equals(b));
		System.out.println(a.equals(c));
		System.out.println(a.equals(d));
		
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
	}

}

 

 

 

public class Rectangle{
	private double width;
	private double height;
	
	public Rectangle(int width, int height) {
		// TODO Auto-generated constructor stub
		this.width = width;
		this.height = height;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}
	
	
	public double area() {
		// TODO Auto-generated method stub
		return this.width * this.height;
	}
	
	public boolean equals(Object obj) {
		Rectangle r = ((Rectangle)obj);
		if(this.area() == r.area()) {
			return true;
		}else {
			return false;
		}
	}

}
public class RactangleApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Rectangle a = new Rectangle(6,4);
		Rectangle b = new Rectangle(2,12);
		Rectangle c = new Rectangle(3,3);
		Rectangle d = c;
		
		System.out.println(a.equals(b));
		System.out.println(a.equals(c));
		System.out.println(a.equals(d));
		System.out.println(d.equals(c));

	}

}

 

 

 

2. String Class

  • 문자(Character)
    • 단순 자료형(char)
    • 문자 선언: char letter;
    • 문자열 할당: letter = 'A';
    • 문자열 사용: System.out.println(letter);
  • 문자열(String) 클래스
    • 연속된 문자(character)들을 저장하고 다루기 위한 클래스
    • 문자열 상수: ""로 둘러싸인 문자열 ➡️ 한번 만들어진 String 객체는 변경 불가 (immutable)
    • 문자열 선언: String greeting;
    • 문자열 할당: greeting = "Hello JAVA!";
    • 문자열 사용: System.out.println(greeting);
    • 특수 문자의 표현(Escape characters)
      • System.out.print("Hello "JAVA!"");
      • System.out.print("Hello \"JAVA!\"");
      • System.out.print("Hello \"JAVA!\"\n");
  • 문자열(String) 클래스 메모리
String str1;
String str2, str3;

str1 = "abc";
str2 = "cde";
str3 = str2;

str2 = str1.toUpperCase();
String str4 = str2.concat("??");
String str5 = "!".concat(str2).concat("@");

System.out.println("str1: " + str1);
System.out.println("str2: " + str2);
System.out.println("str4: " + str4);
System.out.println("str5: " + str5);

 

 

 

  • 문자열(String) 클래스 연산
    • + 연산
      • String greet = "Hello";
      • String name = "JAVA";
      • System.out.println(greet+name+"!");
      • System.out.println(greet+""+name+"!");
    • index
      • String 객체 내의 문자 인덱싱은 배열과 같이 0부터 시작됨
      • charAt(position): 해당 위치의 문자를 반환
      • substring(start, end): start부터 end까지의 문자들을 새로운 문자열로 반환
String greeting = "Hello JAVA";
greeting.charAt(0);
greeting.charAt(10);
greeting.substring(1,3);

 

 

 

public class StringTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String greet = "Hello";
		String name = "JAVA";
		
		System.out.println(greet+name+"!");
		System.out.println(greet+" "+name+"!");
		
		String greeting = "Hello JAVA!";
		System.out.println(greeting.charAt(0));
		System.out.println(greeting.charAt(10));
		System.out.println(greeting.substring(0,5));
		
		for(int i=0; i<greeting.length(); i++) {
			System.out.println(greeting.charAt(i));
		}

	}

}
public class StringPratice {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String str = "JAVA Programming";
		
		for(int i=0; i<str.length(); i++) {
			System.out.print(str.charAt(i));
		}
		System.out.println("");
		
		System.out.println(str.length());
		
		
		
//		for(int i=0; i<20; i++) {
//			System.out.print(str.charAt(i));
//		}
//		System.out.println("");
//		
//		System.out.println("배열의 길이 변경");5
		
		
		
		String s="";
		
		String str2 = "apple mango banana";
		s=str2.replace(" ", ",");
		
		System.out.println(s);

	}

}

 

 

 

3. Wrapper Class

  • 특정 클래스를 가리키는 이름이 아님
  • 8개의 기본 데이터형을 객체 형식으로 다루기 위한 클래스들의 통칭

  • 사용하는 이유
    • 자바 세상에는 객체만 있기 때문에 객체를 대상으로 처리하는 경우가 많음
    • 어떤 클래스는 객체만을 다루기 때문에 기본 데이터형을 쓸 수 없음

 

 

3.1 Wrapper 클래스 박싱(boxing)과 언박싱(unboxing)

  • 기본 데이터 타입을 Wrapper 클래스로 변환하는 것: boxing
  • Wrapper 클래스를 기본 데이터 타입으로 변환하는 것: unboxing

JDK1.5 이상부터는 박싱(자동 박싱)과 언박싱(자동 언박싱)이 자동으로 일어남