Java 기초

오늘부터 토이프로젝트가 시작된다. 혹시나 조를 짜서 프로젝트를 진행하면 어떻게 되나 했지만 개인별로 진행을 하면 된다고 해서 오히려 좋다는 생각이 들었다. 아직은 내가 다른 사람의 발목을 붙잡지는 않을까라는 걱정이 앞선다..

토이프로젝트는 스마트스토어 운영진을 위한 고객 분류 프로그램을 개발하는 것이다. 단 List, Set, Map 등의 API는 전혀 사용하지않고 총 이용시간과 결제한 금액을 토대로 고객을 분류하고 이를 정렬, 출력 등을 하는 것이다. 물론 데이터들은 모두 직접 입력을 하는 형태로 구현하면 된다. 또한 기준도 직접 입력을 받아서 바꿀 수 있도록 해야한다.
마지막으로 예외처리또한 해주어야한다. 물론 오늘 배우긴 했지만 중요한 부분이기 때문에 빼놓아서는 안된다.

쉬울거라는 생각은 안든다. 천천히 차근차근 해봐야겠다. 아직은 시간적으로 여유가 있으니깐.

오프라인

  1. 예외처리

예외는 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아지지만 잘못 사용하면 반대의 효과만 나타난다.

  • 에러
    치명적인 오류
    시스템이 종료되는 수준
    JVM실행에 문제
    개발자가 예측할 수 없음

  • 예외
    개발자의 로직에서의 실수
    사용자의 잘못된 입력이나 사용
    개발자가 예측가능함
    발생하면 프로그램은 즉시 종료
    -> 예외처리를 통해서 정상 실행 상태를 유지 가능

프로그램 사용자들의 동작에 의해 발생하는 경우
예시
    - 스트림이나 파일 접근시 발생하는 예외 `IOException`
- DB 접속 권한이 없거나 네트워크 오류시 발생하는 예외 `SQLException`
- 존재하지 않는 파일 처리시 발생하는 예외 `FileNotFoundException`
- 클래스 이름을 잘못 적었을 때 발생하는 예외 `ClassNotFoundException`

주로 프로그래머 실수에 의해 발생될 수 있는 예외들
예시
- 배열 범위 벗어났을 때 발생하는 예외 `IndexOutOfBoundsException`
- null인 참조 변수의 멤버를 호출시 발생하는 예외  `NullPointerException`
- 클래스 간의 형을 잘못 변환했을 때 발생하는 예외 `ClassCastException`
- 정수를 0으로 나누려고 했을 때 발생하는 예외 `ArithmeticException`

예외처리 (Exception Handling)

  • 정의 - 프로그램 실행시 발생할 수 있는 예외를 대비한 코드를 작성하는 것

    	try {
    
    	} catch(Exception e1){
    
    	} finally {
    	//예외 발생 유무와 상관없이 무조건 실행	(생략가능)
    	}

상속이나 인터페이스 등으로 인해서 부모 자식 클래스가 생겼을 경우 부모 클래스가 자식의 예외 처리를 전부 할 수도 있다. 따라서 가장 하위의 클래스의 예외부터 try catch 문을 사용하는 것이 좋다.

리소스 닫기
리소스 객체(입출력 스트림, 서버 소켓, 소켓, 각종 채널)은 사용 후 안전하게 자원을 해제해 주어야 한다.

try (
           FileInputStream fileInputStream = new FileInputStream(PATH+FILENAME) ;
           BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        )
        
        

API (Library)
1. java lang
자바의 기본적인 클래스를 담고 있는 패키지.
import 없이도 사용 가능하다.

  • Object
    자바 최상위 클래스
    hashCode(), equals(), toString(), clone(), getClass() 등
  • System
    자바 프로그램은 OS에서 바로 실행되는 것이 아니라 JVM 위에서 실행된다. 때문에 OS의 모든 기능을 자바 코드에 직접 접근하는 것은 어렵다.
    System 클래스를 이용하면 OS의 일부 기능을 사용 가능하다.
System.in (데이터 입력 -> 키보드)
System.out (데이터 출력 -> 모니터)
System.exit() JVM 종료
System.currentTimeMillis() (시스템 시간)
  • String
    문자열 수정없이 읽기만 하는 경우
    String Pool에 저장된다.
    문자열 상수로 저장이 된다.

  • Math
    수학에서 자주 사용하는 상수들과 함수들을 구현해놓은 클래스
    모든 필드와 메소드는 정적 필드/ 메소드로 구성됨

    Math.PI - PI값
    Math.random - 랜덤값
  • 자료형 클래스
    Wrapper Class라고도 부른다.

      Byte, Short, Integer, Long, Float, Double, Character, Boolean
  • Comparable, Comparator
    하나의 인스턴스 안에는 여러 필드값이 존재함
    그 중에서 특정값을 기준으로 객체 배열을 정렬해야 하는 경우에 사용할 수 있다.

  1. java.util
  • StringTokenizer
    문자열을 우리가 지정한 구분자로 쪼개주는 클래스
    token이라는 형태로 만들어진다.
    delimiter라는 구분자를 이용한다.
Object nextElement(), String nextToken()
// 이 두가지 메소드는 다음의 토큰을 반환
// 두가지 메소드는 같은 객체를 반환하는	데 반환형은 다름
// nextElement는 Object를, nextToken은 String을 반환함

// StringTokenizer vs String split()
    // String split() - 빈 문자열도 토큰으로 인식, 정규식 사용 가능, 잘라낸 결과를 배열에 담아서 반환 (데이터 양이 많은 경우 성능 떨어짐)
    // StringTokenizer - 빈 문자열은 토큰으로 인식하지 않음
  • Scanner
    콘솔이나 파일을 통해서 데이터를 입력받는 클래스
in.nextByte()		 // byte 형 입력 및 리턴
in.nextShort()	 // short 형 입력 및 리턴
in.nextInt()		 // int 형 입력 및 리턴
in.nextLong()		 // long 형 입력 및 리턴

in.nextFloat()		// float 형 입력 및 리턴
in.nextDouble()		// double 형 입력 및 리턴

in.nextBoolean()	// boolean 형 입력 및 리턴

in.next()			    // String 형 입력 및 리턴 (공백을 기준으로 한 단어를 읽음)
in.nextLine()		  // String 형 입력 및 리턴 (개행을 기준으로 한 줄을 읽음)
  • Arrays
    배열을 다루기 위한 다양한 메소드 포함
    정적 메소드로 되어있어 객체 생성없이 바로 사용이 가능하다.
profile
이따금씩 올라오는 개발자 블로그

0개의 댓글