23.01.11

이동욱·2023년 8월 6일
0

NaverCloudCamp

목록 보기
9/42

학습내용

  1. Calendar API를 통한 java 기술 이해
  2. Wrapper class
  3. Java Collectoin(자료구조)
  4. generic
  5. exception
  6. return, System.exit()

Calendar API를 통한 java 기술 이해

Calendar cld = Calendar.getInstance();

  • Java.util 패키지 안의 Calendar class는 abstract class이기에 new()를 통해 인스턴스화 할 수 없다.
  • 생성하기 위해 Calender class안에 static 메스드인 getInstance()를 통해 Calendar 인스턴스를 생성한 뒤 해당 인스턴스의 reference 값을 cld에 반환한다.

System.out.println("년 : "+cld.get(Calendar.YEAR));

  • .(dot)을 통해 cld 인스턴스의 get 메서드에 접근한다.
  • get 메서드의 api를 확인하면 parameter로 int field를 받는다
  • Calendar class의 필드를 확인하면 static final로 정의된 YEAR, DAY등 다양한 field들이 존재하고 이 field들은 변경할 수 없다.
  • 위 필드 중 하나를 get() 메서드에 넣고 실행하여 반환된 int를 System.out.println()을 통해 출력한다.
  • System.out.println()은 reference type의 변수를 넣으면 해당 type class의 toString() 메서드 결과를 출력한다.

Wrapper class, boxing unboxing

  • JDK 1.5이전
	int a = 10;
    Integer wInt = new Integer(a); //int에서 Integer로 변환
	
	int b = wInt.intValue(); //Integer에서 int로 변환

모든 reference type class를 생성하면 기본적으로 Java.lang.Object class를 상속받는다.
Object classs는 모든 class의 최상위 class이므로 모든 type의 class들을 담을 수 있어 다형성 구현에 도움이 된다.
그러나 primitive type은 Object를 상속받지 않아 Object를 통한 다형성 구현에서 제약을 받으며 이를 해결하기 위한 것이 Wrapper class이다.
Wrapper class는 Integer, Double 등 각 primitive type을 담는 reference class들이다 reference class이기에 Object를 상속받아 다형성 구현이 가능하다.

  • JDK 1.5이후
	int a = 10;
    Integer wInt = a; //int에서 Integer로 변환
	
	int b = wInt //Integer에서 int로 변환

JDK 1.5버전 이후에는 자동으로 boxing, unboxing 기능을 제공한다.
해당 기능들은 new Integer(a), wInt.intValue()를 자동으로 수행해준다.

Collection(자료구조)

Java는 자료구조를 bean으로 만들어 사용자들에게 제공하고 있다 잘 이용하자.(자료구조 궁금하면 찾아보기)

generic

	Vector vector = new Vector(10,10);
	
	vector.add(10);
	vector.add("vector");
	vector.add("10.0")
	
	for(Object object : vector) {
		System.out.println(object); // vector 각 요소에 맞는 명시적 형변환을 해주어야하기에 for문을 수행 할 때 불편함이 존재한다.
	}

위 Vector은 Object type을 파라미터로 받기 때문에 다양한 class들을 받을 수 있지만 Object type으로 변환 할 때 묵시적 형 변환 ,명시적 형변환을 반복하며 메모리에 부하를 줄 뿐 아니라
다양한 class들이 들어오기에 위 예제처럼 for 문 수행할 수 없다. 이때 등장한 기술이 generic이다.

	Vector<String> vector = new Vector<String>(10,10); //vector은 String만 add 가능하다.

	vector.add("vector1");
	vector.add("vector2");
	vector.add("vector3");

	for(int i = 0; i < v.size(); i++) {
			System.out.println(v.elementAt(i));
	}

generic을 통해 vector가 받을 type을 지정하여 하나의 type만 받아 묵시적 형 변환, 명시적 형변환이 일어나지 않고 type을 명확하게 for문 수행에도 문제가 없다.
즉 데이터 타입을 정확히 명시하여 묵시적, 명시적 형변환이 발생하지 않게 한다.

exception

-error와 exception의 차이
error란 시스템이 종료될 정도로 수습할 수 없는 문제이며 개발자가 처리 불가능하다.
반면 예외는 개발자가 구현한 코드나 사용자의 영향에 의해 발생하며 개발자가 예외를 예측하여 상황에 맞게 처리할 수 있다.

  • exception
    java는 예외를 객체로 취급한다. 예외들의 최상위 class는 java.lang의 Exception class이고 나머지 하위 class들을 Exception class를 상속받는다.
    이를 통해 Exception class 하나만으로 다양한 하위 예외 class들을 사용하여 다형성을 구현할 수 있다.

img

  • checked exceptoin
    컴파일 단계때 jre에서 발생시키는 예외들이며 반드시 try-catch, throws를 통해 예외처리를 해주어야한다

  • unchecked exceptoin
    개발자가 코드를 잘 못 작성하였을때 발생하는 예외들이다. 예외처리를 하지 않아도 컴파일이 되는 예외들이며 RuntimeException을 상속받는 exception들이다.

  • 예외처리 방법1(try - catch)
public void divide(int inputNumber) {
		try{
			int result = 100 / inputNumber; 
		}catch(ArithmeticException e) {
			e.printStackTrace(); //stack구조로 담겨진 예외정보들을 추적하여 출력해준다.
		}
	}

100을 입력받은 수로 나누는 method이며 만약 파라미터로 0이 들어오면 0으로 나눌 수 없기에 ArithmeticException 예외가 발생한다.
이를 처리하기 위해 try 부분에 예외가 발생할 수 있는 로직을 작성하고 발생 할 수 있는 예외를 catch로 잡아 해당 예외가 발생했을 때 실행할 로직을 작성하여 예외를 처리한다.

  • 예외처리 방법2(throws)
	public  divide(int inputNumber) throws ArithmeticException {
		int result = 100 / inputNumber;
	}

예외가 발생 할 수 있는 메서드에서 throws 키워드를 통해 해당 메스들을 실행하는 곳으로 예외를 던지며 메서드를 호출한 쪽에서 예외를 처리해주어야 한다.

return, System.exit()

둘 다 종료라는 의미를 가지고 있지만 return은 해당 메서드의 진행을 종료시키고 System.exit()는 전체 애플리케이션을 종료시킨다.
참고로 try - cathc - finally로 예외 처리 시에 try 부분에 return이 있어도 finally 부분은 반드시 실행된다.

생성자가 아무것도 없으면 default constructor를 생성하지만, 다른 생성자가 존재하면 default 생성자를 생성하지 않는다.
에러 발생 가능성이 있는 코딩을 하지 말고 그냥 무조건 만들자, local variable도 초기화 하지 않고 사용하면 에러가 발생하기에 무조건 초기화시키자

profile
Backend Developer

0개의 댓글