[Java] 7. 자바의 패키지(2)

PYOUNANI·2022년 10월 1일
0

Java

목록 보기
8/14
post-thumbnail

7. 자바의 패키지(2)

7-2. API 클래스


7-2-1. java.lang.Object 클래스

java.lang.Object 클래스
자바의 모든 클래스들은 java.lang.Object를 기반으로 작성 되어진다. 추후에 상속/스레드 부분을 다룰 때 더 자세하게 배울 것이다.

java.lang.Object 클래스의 주요 메서드

java.lang.Object 클래스의 주요 메서드 사용 예시

import exam.pkgtest.Circle;

public class Exam{
	public static void main(String[] args){
    	Circle c = new Circle();
        System.out.println(c);
        
         System.out.println(c.toString());
    }
}

c를 출력하면 참조 변수인 c가 가리키고 있는 객체의 속성이나 메서드가 출력되는 것이 아니다. 출력되기 위해서는 toString()가 포함하여 출력해야 한다.

import exam.pkgtest.Circle;

public class Exam{
	public static void main(String[] args){
    	Circle c = new Circle();
        Circle same = new Circle();
        if (c == same)
        	System.out.println("같다");
        else
        	System.out.println("다르다");
    }
}

c == same은 둘의 객체를 비교한 것이 아니라 참조 값을 비교하게 된 것이다. 그렇다면 equals를 사용해볼 수 있다고 생각할 것이다. 하지만 ~ 그래서 상속을 이용을 해야 한다. 상속에 대한 내용은 뒤에서 학습할 것이다.

7-2-2. Wrapper 클래스

Wrapper 클래스
기본 자료형들을 감싸서 하나의 객체로 표현할 때 사용합니다. 하지만 Wrapper 클래스가 존재하는 것이 아니고 기본 자료형마다 각각 Wrapper 클래스가 존재하고 있다. 기본자료형을 다 풀어쓰고 첫번째 문자만 대문자로 써서 이용하면 된다.

이전에는 new를 통해서 생성자(new)를 이용해 객체를 생성했지만 이제는 Wrapper 객체 안에 valueOf를 이용하면 됩니다.

//.valueOf(기본 자료형의 값, 문자열)
Integer i = Integer.valueOf(10); //10을 가지고 있는 i라는 객체를 생성

Wrapper 클래스의 주요 메서드

static을 사용한 이유는 new를 이용해서 객체를 생성하지 않더라도 메서드를 호출함으로 원하는 동작들을 자유롭게 쓰기 위해서이다.

Wrapper 클래스의 주요 메서드 사용 예시
Wrapper 객체로부터 기본 자료형 얻어내기

Integer i = Integer.valueOf(10);
int ii = i.intValue(); // ii = 10

Double f = Double.valueOf(3.14);
double ff = f.doubleValue(); // ff = 3.14

문자열을 기본 자료형으로 변환

int i = Integer.parseInt("123"); //"123"숫자로 구성되어 있는 문자열을 기본 자료형으로 변환시키기 위한 방법
double f = Double.parseDouble("3.14");

기본 자료형을 문자열로 변환

String s = Integer.toString(123);

toString보다는 보통은 Wrapper 객체에서 제공하는 valueof을 사용한다.

자동적인 박싱과 언박싱
위와 같은 방식으로 쓰기에는 복잡할 수 있습니다. 자동적인 박싱과 언박싱을 이용해 볼 수 있습니다.

Integer ten = 10; //Integer ten = Integer.valueOf(10); 자동 처리  
int n = ten; // int n = ten.intValue(); 자동 처리

7-2-3. 문자열(String) 관련 클래스

String 클래스도 java.lang에서 제공해주는 클래스이기 때문에 import없이 바로 사용이 가능하다.

String s = "Hello";

"Hello"라는 객체가 생성이 되고 s라는 참조 변수형가 가리키게 된다.

String str3 = str1 + str2;

연결 연산자(+)를 주의해야 할 점은 str1 에 str2가 이어지는 것이 아니라 합쳐진 새로운 문자열이 만들어지고 그것이 참조변수형 str3에 저장이 되어진다.
추가로 String은 수정이 불가하다. 수정이 되는 것처럼 보이는 이유는 사실은 기존 것이 폐기 후에 새로 생성되는 것이다.

클래스 객체의 생성 방법

  • 명시적 생성
String s = new String("Hello");

명시적 생성의 방법은 객체를 생성하는 보편적인 방법이다. 다만 문자열은 많이 쓰이는데 이 방법은 번거럽기에 암시적 생성 방법을 제공해준 것이다.

  • 암시적 생성
String s = "Hello";

주의해야 할 점은 두 방법은 동일한 일들이 일어나지는 않는다. 명시적 방법은 새로운 문자열이 동적할당이 되어서 heap영역에 새로 생성이 된다. 암시적 방법은 그 문자열의 참조 변수를 넘겨받는 방식으로 새로운 메모리를 할당받지는 않는다.

import exam.pkgtest.Circle;

public class Exam{
	public static void main(String[] args){
    	String s1 = "hello";
        String s2 = "hello";
        String s3 = new String("hello");
        String s4 = new String("hello");
        
        if (s1 == s2) System.out.println("s1 == s2"); //s1 == s2
        if (s3 != s4) System.out.println("s3 != s4"); //s3 != s4
        if (s1 != s3) System.out.println("s1 != s3"); //s1 != s3
}

실제 문자열 내용이 같은지 확인하기 위해서는 .equals()를 이용해야 한다.

import exam.pkgtest.Circle;

public class Exam{
	public static void main(String[] args){
    	String s1 = "hello";
        String s2 = "hello";
        String s3 = new String("hello");
        String s4 = new String("hello");
        
        if (s1.equals(s2)) System.out.println("s1 == s2"); //s1 == s2
        if (s3.equals(s4)) System.out.println("s3 == s4"); //s3 == s4
        if (s1.equals(s3)) System.out.println("s1 == s3"); //s1 == s3
}

String 클래스의 주요 메서드

주의 대체(replace)한다거나 공백(trim)들 메서드 포함 다른 메서드들도 기존을 변경하는 것이 아니라 기존의 것을 변경해서 새로운 문자열을 만드는 것이다.

하지만 새로운 문자열 객체를 만들기 때문에 효율성이 낮은 편이다. 그럴땐 StringBuffer를 사용해줍니다.

7-2-4. 문자열(StringBuffer) 관련 클래스

chrl 버퍼의 크기가 16인 문자열 버퍼 객체를 생성합니다. 이 안에서 문자열을 수정하게 됩니다. 새로운 객체를 생성하는 것이 아니라 기존의 것을 수정하는 방식입니다.

StringBuffer s = new StringBuffer("hi");

StringBuffer 클래스의 주요 메서드

StringBuffer s = new StringBuffer("hi");
s.append("hello");

7-2-5. 기타 API 클래스

java.lang.Math 클래스
복잡한 산술을 위해서 java.lang.Math에서 클래스들을 제공을 해준다. 모든 메서드는 static으로 시작하기 때문에 math 객체를 생성할 필요없이 그냥 쓰면 됩니다.

int abs(int num) //num의 절대값
double sin(double angle) //angle의 sin
double sqrt(double num) //num의 제곱근

java.util.Calendar 클래스
시간과 날짜과 관련된 메서드를 제공하는 클래스이다. util 패키지이니 import를 이용해서 사용해줘야 합니다.
MONTH는 1월이 0으로 시작하기 때문에 +1을 해줘야합니다.

import java.util.Calendar;

Calender now = Calender.getTnstance(); //날짜, 시각 정보를 가지는 객체 생성
int m = now.get(Calender.MONTH) + 1;
now.set(2020, 10, 1);

java.util.Random 클래스
의사 난수들을 생성하는 메서드를 제공하는 클래스입니다.
의사난수란 일정범위에서 비슷한 확률분포를 갖고 다음 나타나는 수를 예측할 수 없는 수를 의사난수라고 합니다.

nextInt() //정수값 범위
nextInt(int n) //0과 n-1사이에 있는 정수형 난수
nextFloat() //0.0 이상 1.0미만 사이에 있는 난수
import java.util.Random;

Random num = new Random();

newNum = num.nextInt(6) + 1;

0개의 댓글