[Java] 26. 예외 처리 - 실전
·
Java/Core
예외 처리 - 실전#Java정리이전 챕터에서 해결하지 못했던 문제들을 예외 처리를 이용하여 해결해보자.예외 클래스public class NetworkClientExceptionV2 extends Exception { private String errorCode; public NetworkClientExceptionV2(String errorCode, String message) { super(message); this.errorCode = errorCode; } public String getErrorCode() { return errorCode; }}어떤 종류의 오류가 발생했는지 구분하기 위해 예외 안에 오류 코드를 보관하도록 설계한다.클..
[Java] 25. 예외 처리 - 이론
·
Java/Core
예외 처리 1 - 이론#Java정리예외 처리를 왜 해야할까?사용자의 입력을 받고, 입력 받은 문자를 외부 서버에 전송하는 프로그램을 생각해보자.NetworkClient : 외부 서버와 연결하고, 데이터를 전송하고, 연결을 종료하는 기능을 제공한다.NetworkService : NetworkClient를 사용해서 데이터를 전송한다. NetworkClient를 사용하려면 연결, 전송, 연결 종료와 같은 복잡한 흐름을 제어해야 하는데, 이런 부분을 NetworkService가 담당한다.Main을 통해 사용자의 입력을 받으면 사용자의 입력을 NetworkService에 전달한다.NetworkService는 NetworkClient를 사용해서 외부 서버에 연결하고, 데이터를 전송하고, 전송이 완료되면 연결을 종료..
[Java] 24. 중첩 클래스, 내부 클래스(2)
·
Java/Core
중첩 클래스, 내부 클래스(2)#Java정리이전 시간에 배운 내용정적 중첩 클래스: 바깥 클래스와 밀접한 관련이 있지만, 인스턴스 간에 데이터 공유가 필요 없을 때 사용한다.내부 클래스: 바깥 클래스의 인스턴스와 연결되어 있고, 바깥 클래스의 인스턴스 상태에 의존하거나 강하게 연관된 작업을 수행할 때 사용한다.지역 클래스내부 클래스의 특징을 가진다.지역 변수에 접근할 수 있다. 접근하는 지역 변수는 final이거나 사실상 final이어야 한다.주로 특정 메서드 내에서만 간단히 사용할 목적으로 사용한다.지역 변수처럼 접근 제어자를 사용할 수 없다.바깥 클래스의 인스턴스 변수에 접근할 수 있고, 자신의 env에 속한 지역 변수와 매개변수에 접근할 수 있다.내부 클래스를 포함한 중첩 클래스들도 일반 클래스처럼..
[Java] 23. 중첩 클래스, 내부 클래스(1)
·
Java/Core
중첩 클래스, 내부 클래스(1)#Java정리중첩 클래스, 내부 클래스란?클래스 안에 클래스를 중첩해서 정의할 수 있는데, 이것을 중첩 클래스(Nested Class)라 한다.class Outer { ... //중첩 클래스 class Nested { ... }}중첩 클래스의 분류중첩 클래스는 총 4가지가 있고, 크게 2가지로 분류할 수 있다.정적 중첩 클래스정적 변수오 같은 위치내부 클래스 종류내부 클래스인스턴스 변수와 같은 위치바깥 클래스의 인스턴스의 멤버에 접근지역 클래스지역 변수와 같은 위치내부 클래스의 특징 + 지역 변수에 접근익명 클래스지역 클래스의 특징 + 클래스의 이름이 없는 특별한 클래스중첩 클래스를 정의하는 위치는 변수의 선언 위치와 같다.여기서 정적 중첩 클래스와 내부 클래스로 분류하는 ..
[Java] 22. 날짜와 시간
·
Java/Core
보호되어 있는 글입니다.
[Java] 21. 열거형 - ENUM
·
Java/Core
열거형 - 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 클래스
·
Java/Core
래퍼, Class 클래스#Java기본형의 한계자바는 객체 지향 언어이다. 그런데 자바 안에 객체가 아닌 것이 있다. 바로 int , double 같은 기본형(Primitive Type)이다.
한계점객체가 아님: 기본형 데이터는 객체가 아니기 때문에, 객체 지향 프로그래밍의 장점을 살릴 수 없다. 예를 들어 객 체는 유용한 메서드를 제공할 수 있는데, 기본형은 객체가 아니므로 메서드를 제공할 수 없다.추가로 객체 참조가 필요한 컬렉션 프레임워크를 사용할 수 없다. 그리고 제네릭도 사용할 수 없다. (이 부분은 뒤에서 설명한다.)null 값을 가질 수 없음: 기본형 데이터 타입은 null 값을 가질 수 없다. 때로는 데이터가 없음 이라는 상태를 나 타내야 할 필요가 있는데, 기본형은 항상 값을 가지기 때문에..
[Java] 19. String 클래스
·
Java/Core
String 클래스#JavaString 클래스 - 기본char형 배열로 문자열을 관리하기 어려움 String 클래스를 사용한다.문자열을 생성하는 방법은 2가지가 있다.쌍따옴표 사용: ”hello"객체 생성: new String(“hello”)String은 기본형이 아니라 참조형이다.어? 참조형이면 인스턴스의 참조값만 들어갈 수 있는거 아닌가요?String str1 = "hello"; 이게 어떻게 가능하죠? 실제로는 “hello” 대신 new String(“hello”)와 같이 변경되어 동작한다.근데 문자열끼리 덧셈도 가능하지 않나요? 참조형이면 덧셈이 어떻게 가능하죠? 원래는 String이 제공하는 concat()과 같은 메서를 사용해야 하지만, 문자열은 너무 자주 다루어져서 자바에서 편의상 특별..
[Java] 18. 불변 객체
·
Java/Core
불변 객체#Java갑자기 java.lang에 있는 클래스를 배우다가 “불변 객체”라는 개념이 등장했다. 이 개념이 필요한 이유는 다음 챕터에서 배울 String 클래스가 “불변 객체”이기 때문이다. 먼저 불변 객체가 뭔지 알아보자.공유 : 기본형 vs 참조형기본형: 하나의 값을 여러 변수에서 절대 공유하지 않는다.참조형: 하나의 객체를 참조값을 통해 여려 변수에서 공유할 수 있다.공유 참조와 사이드 이펙트사이드 이펙트 : 프로그래밍에서 어떤 계산이 주된 작업 외에 추가적인 부수 효과를 일으키는 것공유 참조를 잘못하면 사이드 이펙트가 발생할 수 있다. 이를 방지할 수 있는 방법에 대해 알아보자.사이드 이펙트 해결 방안단순하게 서로 다른 객체를 참조해서, 같은 객체를 공유하지 않으면 문제가 해결된다. 그런데..
[Java] 17. Object 클래스
·
Java/Core
Object 클래스#Javajava.langlang은 Language의 줄임말로써, 자바 언어를 이루는데 기본이 되는 클래스를 모아둔 패키지이다.java.lang 패키지의 대표적인 클래스들Object : 모든 자바 객체의 부모 클래스String : 문자열Integer , Long , Double : 래퍼 타입, 기본형 데이터 타입을 객체로 만든 것Class : 클래스 메타 정보System : 시스템과 관련된 기본 기능들을 제공import 생략 가능모든 자바 application에 java.lang패키지가 자동으로 임포트되서 따로 구문을 적지 않아도 된다.이번 챕터에서는 java.lang 패키지 중 Object 클래스에 대해 알아본다.Object 클래스클래스에 상속 받을 부모 클래스가 없으면, 묵시적으로 ..