0707 java API

onnbi·2022년 7월 26일
0

java-tutorial

목록 보기
8/13
post-thumbnail

Object

모든 클래스의 최고 조상 클래스
오직 11개의 메서드를 가지고 있다

equals() : 객체 자신과 객체 obj가 같은 객체인지 알려준다

  • String을 비교할 때 사용한다
  • 객체를 비교할 때는 객체의 주소, 즉 변수를 비교하기 때문에 주소가 다르면 false를 반환한다
  • 같은 객체인지 비교하고 싶으면 iv를 비교하도록 오버라이딩해야 한다
class person {
  long id;

// equals Override
public boolean equals(Object obj) {
  // 어떤 객채인지, 어떤 객체를 상속받았는지 확인
  if(obj instanceof person) {
    // id를 참조하기 위해 person타입으로 downcasting
    return id==(person)(obj.id)
  }else {
    return false;
  }
}
}

hashcode() : 객체의 해시코드를 반환하는 메서드 객체의 주소를 int로 반환해서 반환한다

  • equals를 오버라이딩하면 hachCode도 오버라이딩 해야 한다
    (equals의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문)
public int hashCode() {
  return Objects.hash(person);
} // iv가 같으면 같은 값이 나오도록 오버라이딩

tostring() : 객체 자신의 정보를 문자열로 반환한다

  • 패키지명.클래스명@인스턴스식별값을 반환
  • 해당 정보를 반환하는 것 보다 해당 정보를 가진 객체의 멤버 변수 정보를 출력하는 것이 더 유용하므로 보통 오버라이딩 하여 사용한다
TestObject to = new TestObject();
System.out.println(to); //참조형주소 호출시 자동으로 toString호출
System.out.println(to.toString()); // 동일값 출력
int num
String kind

public String toString() {
	return "kind : "+kind", num : "+num;
}

getClass() : 객체 자신의 정보를 갖고 있는 Class인스턴스를 반환한다

clone() : 객체의 복사본을 반환한다

  • 클론은 protected로 막혀 있으므로 다른 패키지에서는 사용할 수 없다
  • 작성 클래스에서 사용하기 위해서는 오버라이딩 해야 한다
  • 오버라이딩을 할 때는 Colneable interface를 implements해야 한다 < JVM에게 알려주기 위해

API

Application Programming Interface

프로그래밍을 할 때 어떠한 특정 기능을 처리할 수 있도록 만들어 놓은 클래스나 메서드의 집합

  • 외부라이브러리로 변경하여 사용할 수 없다

API는 외우기 보다는 메서드 사용법을 익혀야 한다 (매개변수에 뭘 넣어야 하는지, 인스턴스 생성은 어떻게 하는지 각각 다르기 때문)

기본 API

1. StringBuffer 클래스

  • String 클래스는 문자열 값을 수정할 수 없는 immutable(불변)의 성질을 가지기 때문에 수정 시 문자열이 새로 할당된다 > 문자열을 자주 수정하는 경우 메모리 낭비가 심하다
  • StringBuffer는 mutable(가변)의 성질을 가지기 때문에 자주 수정하는 문자열의 경우 String 보다 유용하다
  • Thread Safe 기능을 제공한다 < StringBuilder클래스는 이 기능을 제공하지 않음
// 첫번째 매개변수 위치에, 두번째 매개변수 값을 삽입
	sb.insert(7, " 여기 ");
	System.out.println(sb.toString());
// 문자열중 0번째부터 2번째 앞!!!까지 "수정구문"으로 대체
	sb.replace(0, 2, "수정구문");


// 0-9숫자로 랜덤 인증코드
	Random r = new Random();
	StringBuffer joinCode = new StringBuffer();
	for(int i=0; i<6; i++) {
		int num = r.nextInt(10); // 0-9
		joinCode.append(num);
	}
	System.out.println
	("회원가입 코드 ["+joinCode.toString()+"]");

stringBuffer 클래스의 주요 메서드

stringBuffer
capacity()실제 할당된 공간의 크기 확인
length()실제 문자열 길이 확인
reverse()저장된 문자열을 거꾸로 재배치
insert()문자열의 특정 위치에 문자열 추가
append()문자열 끝에 문자열을 추가
delete()문자열의 일부분을 삭제
replace()문자열의 일부분을 다른 문자열로 변경

2. StringTokenizer 클래스

  • 문자열을 분석하여 토큰으로 분리시켜주는 기능의 클래스
  • 생성시 전달받은 문자열을 구분자로 나누어 각 토큰에 저장
  • 파일에 저장된 텍스트를 처리하는 경우 유용
String str = "임라떼/서울사는/강아지";
// "/"구분자를 기준으로 문자열을 분리하여 각 토큰에 저장한다
StringTokenizer st = new StringTokenizer(str, "/");
// hasMoreTokens가 boolean이기 때문에 false가 나올 때까지 while문을 반복한다
while(st.hasMoreTokens()) { 
	String str1 = st.nextToken();
	System.out.println(str1);
}

StringTokenizer의 주요 메서드

StringTokenizer
countTokens()꺼내지 않고 남아있는 토큰의 수
hasMoreTokens()남아있는 토큰이 있는지 확인 (true/false)
nextToken()토큰을 하나씩 꺼내온다

3. Math 클래스

  • 수학에서 자주사용하는 상수들과 메서드들을 구현해 놓은 클래스
  • 모두 Static메서드로 객체 생성없이 사용 가능하다
public void math() {
  //객체생성X
	System.out.println(Math.abs(10));	// 절대값
	System.out.println(Math.abs(-10));	// 절대값
	// 올림, 버림, 반올림
	//소수 첫자리에서 올림 11.0
  	System.out.println(Math.ceil(10.1));
  	//소수 첫자리에서 버림 10.0
	System.out.println(Math.floor(10.9)); 
 	//소수 첫자리에서 반올림 11(정수)
	System.out.println(Math.round(10.5));	
	// 1.3456 소수 3번째 자리에서 반올림 > 1.35
	// 134.5 만들어서 반올림 하고 135/100.0 > 1.35
	System.out.println(Math.round(1.3456*100)/(double)100);
	// 숫자비교
	// 매개변수로 전달한 두 수 중 큰수 리턴
	System.out.println(Math.max(50, 30));
	// 매개변수로 전달한 두 수 중 작은수 리턴
	System.out.println(Math.min(50, 30));
	}

4. 시간관련 클래스

  1. Date Class

  2. SimpleDateFormat Class

    Date today = new Date(); // Date객체 생성
    // 시스템으로부터 현재 날짜, 시간정보를 가져와 기본값으로 사용
    System.out.println(today);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String todayStr = format1.format(today);
    System.out.println(todayStr);
    SimpleDateFormat format2 = new SimpleDateFormat("yyyy년MM월dd일 HH시mm분ss초 EEE요일");
    String todayStr2 = format2.format(today);
    System.out.println(todayStr2);
  3. Calendar Class

    • Calender클래스의 생성자의 접근제어지시자는 protected
    • getInstance()를 통해 객체를 생성해야 한다
    • 정보 가져오는 방법 : today.get(Calendar.정보종류);
    Calendar today = Calendar.getInstance();
    	//getInstance()메소드를 통해 객체 생성
    	//today.get(Calendar.정보종류);
    	System.out.println(today.get(Calendar.YEAR)); // 0,1,2,3
    	System.out.println(today.get(Calendar.MONTH)+1); // 월(0~11)
    	System.out.println(today.get(Calendar.DATE)); //일
    	System.out.println(today.get(Calendar.AM_PM)); //AM=0, PM=0
    	System.out.println(today.get(Calendar.HOUR));
    	System.out.println(today.get(Calendar.MINUTE));
    	System.out.println(today.get(Calendar.SECOND));
    	System.out.println(today.get(Calendar.MILLISECOND));
    	// 현재 기준 밀리세컨을 보여준다
    	System.out.println(today.get(Calendar.DAY_OF_WEEK)); //(1=일요일, 7=토요일)

    Calendar Class로 시간 계산하는 방법

    Calendar day2 = Calendar.getInstance();
    	long time1 = day2.getTimeInMillis();
    	//1970년도 1월 1일부터 day2까지 몇 ms가 흘렀는지 리턴
    	// 흐른 정도를 보여준다
    	// 양이라고 생각하면 됨
    	day2.set(Calendar.DATE, 8); // 7/8
    	long time2 = day2.getTimeInMillis();
    	System.out.println("time1 : "+time1);
    	System.out.println("time2 : "+time2);
    	System.out.println("시간차이 : "+(time2-time1));
    		
    	Date date1 = new Date(time1);
    	Date date2 = new Date(time2);
    	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	String date1str = format.format(date1);
    	String date2str = format.format(date2);
    	System.out.println(date1str);
    	System.out.println(date2str);

5. wrapper 클래스

반드시 참조형이 들어가야 하는 매개변수 인자, 제네릭 등을 사용하기 위해 기본형을 참조형으로 변환하는 클래스

기본타입래퍼 클래스
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

boxing / unboxing

  • 기본 타입을 참조형으로 감싸주는 것 : 박싱(Boxing)
    Integer num = new Integer(10);
  • 래퍼 클래스의 인스턴스에 저장된 값을 기본 타입의 데이터로 꺼내는 과정 : 언박싱(UnBoxing)
    int n = num.intValue();

auto boxing / auto unboxing

  • 정수 10을 auto Boxing하여 Integer클래스로 객체화
    intrger num = 10;
  • Integer객체 num에 들어있는 정수값 auto Unboxing하여 정수형 변수에 저장
    int n = num;
public void wrap() {
	// 1+"" < 문자열 됨
	// 다른 방법
  	//wrapper 클래스 사용 예
		
	// 1) 문자열 > 기본형
	String str1 = "100";
	System.out.println(str1+1); //1001
  	// Integer.parseInt(str) : 숫자형 문자열을 Integer형으로 반환
	int num = Integer.parseInt(str1);
  	// int로 auto-unboxing
	System.out.println(num+1); //101
		/*
		String str2 = "100a";
		정상적인 정수가 아닌 경우 변환 도중 에러 발생
		int num2 = Integer.parseInt(str2);
		 */
	String str2 = "3.14";
	double dNum = Double.parseDouble(str2);
	System.out.println(dNum);
		
	// 1-2) 문자열 > 문자 변환
	String str3 = "A";
	char ch = str3.charAt(0);
		
		
	// 2) 기본형 > 문자열
	int num1 = 100;
	// 2-1) Integer 사용 방법 (wrapper클래스 사용)
	String str4 = Integer.valueOf(num1).toString();
	double dNum2 = 3.14;
	String str5 = Double.valueOf(dNum2).toString();
		
	// 2-2) String 클래스 사용
	String str6 = String.valueOf(num1);
	String str7 = String.valueOf(dNum);
	}
	
	// 문자형 > 문자열
	Char ch = 'a';
	String data = ch.toString();

Integer.parseInt(data) : 문자형의 기본형 데이터를 Integer형으로 변환

valueOf : 기본 자료형을 문자열로 변경할 때는 Integer, Double 같은 wrapper클래스를 사용 하거나, String 클래스 사용하여 변환

문자형의 변환은 charAt(index) 혹은 ch.toString을 사용하므로 예외

profile
aelatte coding journal

0개의 댓글