본문 바로가기

자바

(19)
📖 Exception에 대하여 2021-02-24 글 오늘 수업 시간에 자바의 Exception에 대해 배웠다. 수업을 듣고 들은 내용을 자바의 정석의 예외 처리를 함께 보면서 정리 ✍️ 프로그램 오류 종류 컴파일 에러 - 컴파일 시에 발생하는 에러 런타임 에러 - 실행 시에 발생하는 에러 논리적 에러 - 실행은 되지만, 의도와 다르게 동작하는 것 프로그램에서 실행 도중 발생할 수 있는 모든 경우의 수를 고려해 이에 대한 적절한 대비가 필요하다! Error와 Exception의 차이? Error 애플리케이션이 정상적으로 동작하는데 심각한 문제가 있는 경우 사용한다. ex) 메모리 부족이나 스택오버플로우 등 개발자가 Error를 사용하는 일은 거의 없다고 한다. Exception 비즈니스 로직 상에서 에러가 발생하는 경우 사용한다. 발..
📖 Enum 열거형 2021-02-21 열거형이란? JDK 1.5 부터 새로 추가된 개념이다. 기존의 언어들과 자바의 Enum이 다른 점은 열거형이 갖는 값 뿐만 아니라 타입까지 관리하기 때문에 보다 논리적인 오류를 줄일 수 있다. '타입에 안전한 열거형'을 제공하여 실제 값이 같아도 타입이 다르면 조건식 결과가 false이다. 값 뿐만 아니라 타입까지 체크한다. 상수 값이 바뀌어도 기존 소스를 다시 컴파일하지 않아도 된다. 열거형의 정의와 사용 enum 열거형이름 {상수명1, 상수명2, ...} 열거형에 정의된 상수를 사요아는 방법은 열거형이름.상수명이다. 클래스의 static 변수를 참조하는 것과 동일하다. 열거형 상수간 비교 == 연산자를 사용하여 비교할 수 있다. equals()가 아닌 ==으로 비교가 가능하다는 것..
[Effective java] item 34. int 상수 대신 열거 타입을 사용하라 2021-02-20 글 Enum ? [Java] Enum 열거형 int Enum Pattern의 단점 타입 안전을 보장할 방법이 없다. public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_TEMPLE = 1; public static final int ORANGE_BLOOD = 2; 위와 같은 예제에서는 사과용 상수 이름은 모두 APPLE_로 시작, 오렌지용 상수는 ORANGE_로 시작한다. 이는 ..
[Effective java] item 28. 배열보다는 리스트를 사용하라 2021-02-17 글 이사 우테코 Level 1 로또 미션에서 "배열 대신 ArrayList를 사용한다."가 요구사항에 들어있었다. 왜 배열대신 ArrayList를 사용하라는 것일까? 찾아보니 이펙티브 자바에서도 그 내용이 나와 있어서 스스로의 물음에 답하는 내용을 정리하려 한다. Array(배열) vs ArrayList(리스트) 들어가기에 앞서 이펙티브 자바를 보기 전 Array과 ArrayList의 차이점을 간단히 적어본다. Array(배열) 사이즈가 정적인 데이터 구조이다. 일단 생성되면 크기를 변경할 수 없다. 원시 타입과 객체 모두 원소로 포함할 수 있다. for 또는 for-each 루프를 통해서 반복된다. 길이에 대해 length 변수를 사용한다. Generic(제네릭)을 사용 할 수 없다..
[Java] 불변 객체 (Immutable Class) 2021-02-15 글 불변 객체 (Immutable Class)란? 불변 객체란 말 그대로 변경이 불가능한 객체이다. 객체를 생성 후 외부에 의해 그 상태를 바꿀 수 없다. 여기서 바꿀 수 없다는 것은 heap 영역에서 그 객체가 가리키고 있는 데이터 자체의 변화가 불가능 함을 의미하며 stack에 있는 주소값을 다른 주소값을 가리키도록 변경하는 것은 문제 없다. ➕ 여기서 말하는 heap 영역이란 무엇인가? 간단하게 말해 원시타입(int, boolean 등)은 그대로 stack 영역에 올라가지만, 참조변수를 가지고 있는 타입(Object, Array 등)은 그 실제 데이터들은 heap 영역에 저장하고 이 주소값을 Stack 영역에 가지고 있다. 예시로 String name = "amazzi";에서 n..
[Java] String vs StringBuffer vs StringBuilder 2021-02-15 글 자바의 불변 객체를 공부하다가 String 과 StringBuilder가 예시로 자주 등장함을 보게 되었다. 나도 Java를 제대로 공부한지 얼마 안되서, 사실 String, StringBuffer, StringBuilder의 명확한 차이를 잘모르고 그냥 가져다 썼는데, 자바의 정석을 읽어보니 이 String이 굉장히 흥미로워서 👀 이번 기회에 명확히 정리하고 가는 것이 좋다고 생각했다. String String은 참 특이한 존재이다. 다른 언어에서 문자열이란 대부분 char형의 배열로 다루는데, 자바에서는 이 문자열을 위한 클래스가 존재한다는 것이다. 이 String 클래스를 깊게 보기 위해 String 클래스가 어떻게 이루어져 있는지 들여다보자. String.java 일부 pu..
[Effective java] item 1. 생성자 대신 정적 팩터리 메서드를 고려하라 2021-02-14 글 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 디자인 패턴의 팩터리 메서드와는 다르다. 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 하지만 정적 팩터리 메서드는 반한될 객체의 특성을 메소드명을 통해 드러낼 수 있다. Exmaple - 생성자 public Cars(List names) { validateNonDuplicatedNames(names); for (String name : names) { cars.add(new Car(name)); } } private void validateNonDuplicatedNames(final List names..
[Java] 배열의 깊은 복사와 얕은 복사 2021-02-10 글 자바에서의 객체 복사 자바에서 객체를 복사하는 유형에는 얕은 복사와 깊은 복사가 있다. 얕은 복사 단순히 객체의 주소 값만을 복사하는 것이다. 때문에 실제로는 하나의 주소 값만을 가지고 서로 간의 값은 바뀌지 않는다. 대부분 객체를 복사한다는 말은 얕은 복사가 아닌 깊은 복사를 의미한다. Example public class Array_Shallow_Copy{ public static void main(String[] args) { int[] arr1 = { 1, 2, 3}; int[] arr2 = arr2; } } = 연산자는 주소를 이어줌을 의미하는데, 위 예제는 a의 배열을 b배열로 = 연산자를 활용하여 대입했기 때문에 얕은 복사가 된다. 즉 같은 주소값을 가진다. (참조에 ..