Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

WON.dev

chapter20 : api 본문

JAVA

chapter20 : api

GAWON 2023. 5. 16. 18:35
1.1 java.lang 패키지
 - 자바 프로그램의 기본적인 클래스를 담고 있는 패키지
 - import 없이 사용 가능

	클래스									용도
 	Object					- 자바 클래스의 최상위 클래스

 	System					- 표준 입력 장치(키보드)로부터 데이터를 입력받을 때 사용
				 					- 표준 출력 장치(모니터)로 출력하기 위해 사용
				 					- 자바 가상 기계를 종료시킬 때 사용
				 					- 쓰레기 수집기를 실행 요청할 때 사용

 	Class							- 클래스를 메모리로 로딩할 때 사용

 	String						- 문자열을 저장하고 여러 가지 정보를 얻을 때 사용

 	StringBuffer, StringBuilder		- 문자열을 저장하고 내부 문자열을 조작할 때 사용
                                  (연산이 많이 일어날때 쓴다)

 	Math							- 수학 함수를 이용할 때 사용

 	Wrapper(Byte,Short,Character	  - 기본 타입의 데이터를 갖는 객체를 만들 때 사용
 	(파싱)	    Integer, Float, Double	- 문자열을 기본 타입으로 변환할 때 사용
 			    Boolean, Long)			    - 입력값 검사에 사용


* String, StringBuffer, StringBuilder의 차이
String 			  : 문자열 연산이 적고 멀티쓰레드 환경에서 사용
StringBuffer	: 문자열 연산이 많고 멀티쓰레드 환경에서 사용
StringBuilder	: 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는경우에 사용



1.2 java.lang.Object 클래스
 - 모든 클래스의 슈퍼클래스 (super)이다. (=> 단군할배)
 - 모든 클래스는 자동으로 Object 클래스를 상속받는다.
 - 따라서, 모든 클래스는 Object 클래스의 메소드를 사용 할 수 있다.
 - 모든 클래스 및 데이터는 Object 클래스에 저장 할 수 있다.
 - 주요 메소드
	1) clone() 		: 인스턴스 복제
		- 실제 복제기능은 Object 클래스의 clone()에 정의 되어있다.
		- 반드시 Cloneable 인터페이스를 구현(implements)해야 한다.
		- CloneNotSupportedException 예외 처리를 해야한다.(try ~ catch)
		- 본래 clone() 메소드의 접근지시자 (protected)를 public으로 변경한다.

	2) equals() 	: 인스턴스 동등 비교
	3) getClass()	: 클래스 알아내기
	4) hashCode() 	: 해시 코드 값 알아내기
	5) toString()	: 인스턴스 출력 문자열 반환


1.3 java.util 패키지(Ex05_String / Ex05_StringBuffer)
 - 유틸리티성 역할을 하는 클래스들을 담고 있다.
 - 컬렉션 클래스들이 대부분을 차지하고 있다.
 	* 컬렉션(Collections) 클래스 = 여러 유용한 알고리즘을 구현한 메소드들의 집합
 		정렬(Sorting), 섞기(Shuffling), 탐색(Searching) 등이 있다.


★ 클래스						    용도
 	Arrays				  - 배열을 조작(비교, 복사, 정렬, 찾기)할 때 사용

 	Calendar			  - 운영체제의 날짜와 시간을 얻을 때 사용

 	Date				    - 날짜와 시간 정보를 저장하는 클래스

 	Objects				  - 객체 비교, null 여부 등을 조사할 때 사용

 	StringTokenizer		- 특정 문자로 구분된 문자열을 뽑아낼 때 사용

	Random				- 난수를 얻을 때 사용
Q1. Test01.java
Score 클래스 					필드 : int kor, eng, mat
							메소드 : Constructor, toString(), equals()
Score 인스턴스를 2개 생성하고, 동등 비교(세과목이 모두 같으면 동등) 결과 출력
각 인스턴스 정보는 toString 메소드를 통해 출력

package org.joonzis.test;

class Score {
	private int kor, eng, mat;
	public Score(int kor, int eng, int mat) {
		super();
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}
	@Override
	public String toString() {
		return "국어 : " + kor + ",영어 :" + eng + " ,수학 : " + mat +"점";
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (!(obj instanceof Score)) {
			return false;
		}
		Score other = (Score) obj;
		return kor == other.kor && eng == other.eng && mat == other.mat;
	}
}

public class Test01 {
	public static void main(String[] args) {

		Score score1 = new Score(90, 80, 70);
		Score score2 = new Score(85, 75, 70);

		System.out.println(score1);
		System.out.println(score2);
		
		score1.equals(score2);
	}

}

Q2. Test02.java
User 클래스 					필드 : String id, password
							메소드 : Constructor, toString(), equals()
User 인스턴스를 2개 생성하고, 동등 비교(id, password 모두 같으면 동등) 결과 출력
각 인스턴스 정보는 toString 메소드를 통해 출력

package org.joonzis.test;

class User {
	private String id, password;
	public User(String id, String password) {
		super();
		this.id = id;
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [id= " + id + " , password=" + password + "]";
	}

	@Override
	public boolean equals(Object obj) {
		if (obj != null && obj instanceof User) {
			User tmp = (User) obj;
			if (id.equals(tmp.id) && password.equals(tmp.password)) {
				return true;
			}
		}
		return false;
	}
}

public class Test02 {
	public static void main(String[] args) {
		
		User user1 = new User("id1", "password1");
		User user2 = new User("id1", "password1");

		System.out.println(user1);
		System.out.println(user1.equals(user2) ? "같다" : "다르다");
	}
}

Q3. Test03. java

Coordinate 클래스				필드 : int x, int y;
							메소드 : Constructor, equals()
Circle 클래스					필드 : Coordinate center, double radius
							메소드 : Constructor, equals()
new Circle(0, 0, 1.5) // 중심 좌표[0,0], 반지름 : 1.5

package org.joonzis.test;

class Coordinate {
	private int x, y;
	public Coordinate() {}
	public Coordinate(int x, int y) {
		this.x = x;
		this.y = y;
	}
	public boolean equals(Object obj) {
		if (obj != null && obj instanceof Coordinate) {
			Coordinate tmp = (Coordinate) obj;
			if (x == tmp.x && y == tmp.y) {
				return true;
			}
		}
		return false;
	}
}
class Circle {
	private	Coordinate center;
	private	double radius;
	public Circle( int x, int y,double radius) {
		this.center = new Coordinate(x,y);
		this.radius = radius;
	}
	@Override
	public boolean equals(Object obj) {
		if (obj != null && obj instanceof Circle) {
			Circle tmp = (Circle) obj;
			if (center.equals(tmp)&& radius == tmp.radius) {
				return true;
			}
		}
		return false;
	}	
}
public class Test03 {
	public static void main(String[] args) {
		Circle cir1 = new Circle(0, 0, 1.5);
		Circle cir2 = new Circle(0, 0, 1.5);
		System.out.println(cir1.equals(cir2));
	}
}

Q4. Test04.java

Student 클래스				필드 : String no(학번), String name, int[] scores(국,영,수)
							     double average, char grade, 상수 int COURSE_COUNT(과목수)
							메소드 : Student(String no, String name)
								   setter{
									setScores(int kor, int eng, int mat) - 직접 입력
									setScores(int[] scores) - 랜덤 입력
									setAverage()
									setGrade()
									}
								   toString() 학번, 성명, 평균, 학점 출력
								   equals() 학번이 같으면 같은 학생으로 비교

package org.joonzis.test;

import java.util.Random;

 
class Student{
   private String no, name; 
   private int[] scores;
   private double average;
   private char grade;
   public static final int COURSE_COUNT = 3;   // 상수 : 값이 변할수 없음, 항상 초기값을 넣어놔야함
   // 상수는 프라이빗으로 하면 안됌
   
   public Student(String no, String name){
      this.no = no;
      this.name = name;
      scores = new int[COURSE_COUNT];      // 배열의 크기가 3인걸 알고 있으니 사용함(그냥 숫자 적어도됌)
   }
   // 저장 
   // 배열하는 이유는 setAverage()에서 배열을 통해서 저장할 수 있다.
   public void setScores(int kor, int eng, int mat) {      
      scores[0] = kor;
      scores[1] = eng;
      scores[2] = mat;
      setAverage();
      setGrade();
   }
   public void setScores(int[] scores) {
      for(int i=0; i<COURSE_COUNT; i++) { //   배열의 길이로 넣어도가능 scores.length
         this.scores[i] = scores[i];
      }
      setAverage();
      setGrade();
   }
   private void setAverage() { //외부에서는 setScores만 노출
      int total = 0;
      for (int i=0; i< COURSE_COUNT; i++) {
         total += scores[i];
      }
      average = (double)total / COURSE_COUNT;
   }
   private void setGrade() {
      if(average>=90) {grade = 'A';}
      else if(average>=80) {grade = 'B';}
      else if(average>=70) {grade = 'C';}
      else if(average>=60) {grade = 'D';}
      else {grade = 'F';}
   }
   @Override
   public String toString() {
      return "학번 : " + no + ", 이름 : " + name + ", 평균 : " + average + ", 학점 : " + grade;
   }
   @Override
   public boolean equals(Object obj) {
      if (obj != null && obj instanceof Student) {
         Student other = (Student)obj;
         return no.equals(other.no);
      }else {
         return false;
      }
   }
}
public class Test04 {
   public static void main(String[] args) {
      
      Student stu1 = new Student("230001", "강돼지");
      stu1.setScores(70, 85, 44);
      System.out.println(stu1.toString());
      
      System.out.println("----------------");
   
      Student stu2 = new Student("230002", "박토끼");
      int[] sco = new int[Student.COURSE_COUNT]; // static은 객체가아닌 클래스로 접근해야함
      Random ran =new Random();
      for (int i=0; i<sco.length; i++) {
         sco[i] = ran.nextInt(100)+1; // 100은 점수, 0점부터하고 싶으면 101로 할것
      }
      stu2.setScores(sco);
      System.out.println(stu2.toString());
      
      if(stu1.equals(stu2)) {
         System.out.println("같은 학생입니다.");
      }else {
         System.out.println("다른 학생입니다.");
      }
      
   }

}

Q5.Test05.java
성(lastName), 이름(firstName)을 각각 입력 받아
하나의 이름(fullName)을 완성하시오. StringBuffer 클래스를 이용하시오.
위의 방식으로 두 이름을 입력 받아 두 이름(fullName)의 동등 비교를 진행하시오.
package org.joonzis.test;

import java.util.Scanner;

public class Test05 {

	static java.util.Scanner sc = new Scanner(System.in);
	private static String lastName;
	private static String firstName;

	public static void main(String[] args) {

		StringBuffer sb1 = new StringBuffer();
		StringBuffer sb2 = new StringBuffer();

		System.out.println("성(lastName) >>");
		lastName = sc.nextLine();
		System.out.println("성(firstName) >>");
		firstName = sc.nextLine();

		sb1.append(lastName).append(firstName);

		System.out.println("성(lastName) >>");
		lastName = sc.nextLine();
		System.out.println("성(firstName) >>");
		firstName = sc.nextLine();

		sb2.append(lastName).append(firstName);

		System.out.println("첫 번쨰 이름 : " + sb1);
		System.out.println("두 번쨰 이름 : " + sb2);
         
		// StringBuffer 객체가 아닌 String 값의 비교
		if (sb1.toString().equals(sb2.toString())) {
			System.out.println("같은 이름");
		} else {
			System.out.println("다른 이름");
		}

	}
}


 Q6.Test06.java
1! ~ 99! 까지 전체 결과를 출력하시오.
1! (1 팩토리얼) = 1
2! (2 팩토리얼) = 1 * 2 = 2
3! (3 팩토리얼) = 1 * 2 * 3 = 6
4! (4 팩토리얼) = 1 * 2 * 3 * 4 = 24
...
n!: (n-1) * n

ex)
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
...
99!

package org.joonzis.test;

import java.math.BigInteger;


public class Test06 {
	public static void main(String[] args) {
// 1. int
//		for (int i = 1; i < 100; i++) {
//			int sum = 1;
//			System.out.print(i + "! = ");
//			for (int j = 1; j <= i; j++) {
//				sum *= j;
//
//			}
//			System.out.println(sum);
//		}

// 2. long
//		for (int i = 1; i < 100; i++) {
//			long sum = 1;
//			System.out.print(i + "! = ");
//			for (int j = 1; j <= i; j++) {
//				sum *= j;
//
//			}
//			System.out.println(sum);
//		}
//		
		
// 3. BigInteger
		for (int i = 1; i < 100; i++) {
			BigInteger sum = new BigInteger("1");
			System.out.print(i + "! = ");
			for (int j = 1; j <= i; j++) {
				
				//sum *= j;
				//sum = sum *= j;
				sum = sum.multiply(BigInteger.valueOf(j));
			}
			System.out.println(sum);
	}
		
	}
}

Q7.Test07.java
현재 날짜를 StringBuffer, Calendar 클래스를 이용하여
"2019년 10월 21일 월요일 오후 1시 10분" 과 같은 형식으로 완성하고 출력하시오.
StringBuffer.append() 이용
String[] weeks = {"","일","월","화","수","목","금","토"};

package org.joonzis.test;

import java.util.Calendar;

public class Test07 {
   public static void main(String[] args) {
      
      StringBuffer sb = new StringBuffer();
      Calendar cal = Calendar.getInstance();
      String[] weeks = {"","일","월","화","수","목","금","토"};

      sb.append(cal.get(Calendar.YEAR)+ "년 ");
      sb.append((cal.get(Calendar.MONTH)+1) + "월 ");
      sb.append(cal.get(Calendar.DATE)+ "일 ");
      sb.append(weeks[cal.get(Calendar.DAY_OF_WEEK)]+ "요일 ");
      sb.append(cal.get(Calendar.AM_PM) == 0 ? "오전 " : "오후 ");
      sb.append(cal.get(Calendar.HOUR)+ "시 ");
      sb.append(cal.get(Calendar.MINUTE)+ "분 ");
      
      System.out.println(sb);
      
   }
}

'JAVA' 카테고리의 다른 글

chapter22 : Generic  (0) 2023.05.16
chapter21 : thread  (0) 2023.05.16
chapter19 : exception  (0) 2023.05.16
chapter18 : interface  (0) 2023.05.16
chapter17 : abstract  (0) 2023.05.16