Programming Language/Java 21

[Java] 21. 열거형 - ENUM

열거형 - ENUM#Java열거형이 생겨난 이유문자열로 처리에피소드 : 고객은 3등급으로 나누고, 상품 구매시 등급별로 할인을 적용한다. 할인시 소수점 이하는 버린다.BASIC 10% 할인GOLD 20% 할인DIAMOND 30% 할인만약 if문을 통해서 구현한다면public int discount(String grade, int price) { int discountPercent = 0; if (grade.equals("BASIC")) { discountPercent = 10; } else if (grade.equals("GOLD")) { discountPercent = 20; } else if (grade.equals("DIAMOND")) { discountPercent = 30; } els..

[Java] 20. Wrapper/Class/System/Random 클래스

래퍼, Class 클래스#Java기본형의 한계자바는 객체 지향 언어이다. 그런데 자바 안에 객체가 아닌 것이 있다. 바로 int , double 같은 기본형(Primitive Type)이다.
한계점객체가 아님: 기본형 데이터는 객체가 아니기 때문에, 객체 지향 프로그래밍의 장점을 살릴 수 없다. 예를 들어 객 체는 유용한 메서드를 제공할 수 있는데, 기본형은 객체가 아니므로 메서드를 제공할 수 없다.추가로 객체 참조가 필요한 컬렉션 프레임워크를 사용할 수 없다. 그리고 제네릭도 사용할 수 없다. (이 부분은 뒤에서 설명한다.)null 값을 가질 수 없음: 기본형 데이터 타입은 null 값을 가질 수 없다. 때로는 데이터가 없음 이라는 상태를 나 타내야 할 필요가 있는데, 기본형은 항상 값을 가지기 때문에..

[Java] 19. String 클래스

String 클래스#JavaString 클래스 - 기본char형 배열로 문자열을 관리하기 어려움 String 클래스를 사용한다.문자열을 생성하는 방법은 2가지가 있다.쌍따옴표 사용: ”hello"객체 생성: new String(“hello”)String은 기본형이 아니라 참조형이다.어? 참조형이면 인스턴스의 참조값만 들어갈 수 있는거 아닌가요?String str1 = "hello"; 이게 어떻게 가능하죠? 실제로는 “hello” 대신 new String(“hello”)와 같이 변경되어 동작한다.근데 문자열끼리 덧셈도 가능하지 않나요? 참조형이면 덧셈이 어떻게 가능하죠? 원래는 String이 제공하는 concat()과 같은 메서를 사용해야 하지만, 문자열은 너무 자주 다루어져서 자바에서 편의상 특별..

[Java] 18. 불변 객체

불변 객체#Java갑자기 java.lang에 있는 클래스를 배우다가 “불변 객체”라는 개념이 등장했다. 이 개념이 필요한 이유는 다음 챕터에서 배울 String 클래스가 “불변 객체”이기 때문이다. 먼저 불변 객체가 뭔지 알아보자.공유 : 기본형 vs 참조형기본형: 하나의 값을 여러 변수에서 절대 공유하지 않는다.참조형: 하나의 객체를 참조값을 통해 여려 변수에서 공유할 수 있다.공유 참조와 사이드 이펙트사이드 이펙트 : 프로그래밍에서 어떤 계산이 주된 작업 외에 추가적인 부수 효과를 일으키는 것공유 참조를 잘못하면 사이드 이펙트가 발생할 수 있다. 이를 방지할 수 있는 방법에 대해 알아보자.사이드 이펙트 해결 방안단순하게 서로 다른 객체를 참조해서, 같은 객체를 공유하지 않으면 문제가 해결된다. 그런데..

[Java] 17. Object 클래스

Object 클래스#Javajava.langlang은 Language의 줄임말로써, 자바 언어를 이루는데 기본이 되는 클래스를 모아둔 패키지이다.java.lang 패키지의 대표적인 클래스들Object : 모든 자바 객체의 부모 클래스String : 문자열Integer , Long , Double : 래퍼 타입, 기본형 데이터 타입을 객체로 만든 것Class : 클래스 메타 정보System : 시스템과 관련된 기본 기능들을 제공import 생략 가능모든 자바 application에 java.lang패키지가 자동으로 임포트되서 따로 구문을 적지 않아도 된다.이번 챕터에서는 java.lang 패키지 중 Object 클래스에 대해 알아본다.Object 클래스클래스에 상속 받을 부모 클래스가 없으면, 묵시적으로 ..

[Java] 16. 예외 처리(Exception handling)(5) - 예외 되던지기, 연결된 예외

예외 처리(5) - 예외 되던지기, 연결된 예외예외 되던지기(exception re-throwing)앞서 말했던 것처럼 한 메서드에서 발생할 수 있는 예외가 여럿인 경우 몇 개는 try-catch문을 통해서 자체적으로 처리하고, 나머지는 선언부에 지정하여 호출한 메서드에서 처리하도록 함으로써 양쪽에서 나눠서 처리되도록 할 수 있다.심지어 단 하나의 예외에 대해서도 예외가 발생한 메서드와 호출한 메서드 양쪽에서 처리하도록 할 수 있다.이것은 예외를 처리한 후에 인위적으로 다시 발생시키는 방법을 통해서 가능한데, 이것을 예외 되던지기라고 한다.먼저 예외가 발생할 가능성이 있는 메서드에서 try-catch문을 사용해서 예외를 처리해주고 catch문에서 필요한 작업을 행한 후에 throw문을 사용해서 예외를 다..

[Java] 15. 예외 처리(Exception handling)(4) - finally블럭, 자동 자원 반환: try-with-resources문, 사용자 정의 예외

예외처리(4) - finally블럭, 자동 자원 반환: try-with-resources문, 사용자 정의 예외finally블럭finally 블럭은 try-catch문과 함께 예외의 발생여부에 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용된다.try-catch문의 끝에 선택적으로 덧붙여 사용할 수 있으며, try-catch-finally 순서로 구성된다예외 발생시 : try->catch->finally예외 발생 X : try->finallyclass FinallyTest { public static void main(String args[]) { try { startInstall(); // 프로그램 설치에 필요한 준비를 한다. ..

[Java] 14. 예외 처리(Exception handling)(3) - 메서드에 예외 선언하기

예외 처리(3) - 메서드에 예외 선언하기메서드에 예외 선언하기지금까지 다룬 try-catch 사용법 말고 예외를 메서드에 선언하는 방법이 있다.메서드 선언부에 키워드 throws를 사용해서 메서드 내에서 발생할 수 있는 예외를 적어주기만 하면 된다.예외가 여러 개일 경우 쉼표(,)로 구분한다void method() throws Exception1, Exception2, ... ExceptionN { // method body}Exception 클래스를 메서드에 선언하면, 모든 종류의 예외가 발생할 가능성이 있다는 뜻이다.메서드의 선언부에 예외를 선언하므로써 메서드를 사용하려는 사람이 메서드를 사용하기 위해 어떠한 예외들이 처리되어져야 하는지를 쉽게 할 수 있다.기존의 많은 언어들은 메서드에 예외..

[Java] 13. 예외 처리(Exception handling)(2) - try-catch 문

예외 처리(2): try-catch문try-catch문try { // 예외가 발생할 가능성이 있는 문장} catch (Exception1 e1) { // Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.} catch (Exception2 e2) { // Exception2이 발생했을 경우, 이를 처리하기 위한 문장을 적는다....} catch (ExceptionN eN) { // ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.}하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 하나 이상의 catch 블럭이 올 수 있다.이 중 발생한 예외의 종류와 일치하는 단 한 개의 catch블럭만 수행된다...

[Java] 12. 예외 처리(Exception handling)(1) - 예외 처리란?

예외 처리(exception handling) - 예외 처리란?프로그램 오류컴파일 에러 : 컴파일 시에 발생하는 에러런타임 에러 : 실행 시에 발생하는 에러논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것그러면 에러와 예외의 차이점은 무엇인가요?에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류예외 클래스의 계층 구조자바는 실행 시 발생할 수 있는 오류(Exception, Error)를 클래스로 정의했다.모든 클래스의 조상은 Object이므로 Exception과 Error클래스 역시 Object 클래스의 자손이다.예외 클래스는 다음과 같이 두 개의 그룹으로 나눌 수 있다.RuntimeException 클래스와 그 자손클래스..