JAVA/[JAVA]
[JAVA] 혼동하기 쉬운 Objects.equals의 null 처리
기초적인 내용이지만 쉽게 혼동하는 부분이다. 일단 기초적인 설명을 하자면 Objects 클래스에는(모든 오브젝트의 조상 Object와 다르다) equals와 deepEquals 메서드가 있다. deepEquals는 다차원 배열까지 비교할 수 있다.(내부적으로 루프를 탐) String과 같은 각자의 객체도 equals를 갖고 있는데 왜 또 있지? 라고 생각하면, java.util.Objects의 equals는 내부적으로 null을 확인하고 처리하는 메서드를 가지고 있다. 만약 String s1이 null인데 아래와 같은 실행을 하면 NullPointerException 이 발생할 것이다. s1.equals(s2) 하지만 아래와 같이 쓰면 null이더라도 같은지 확인하게 된다. Objects.equals(s..

[JAVA] 예외와 예외 처리(exception)
프로그램 오류 프로그램이 실행 중 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이에 대한 원인을 에러 또는 오류라고 한다. 오류의 종류 자바에서는 실행중 발생할수 있는 오류를 두가지로 분류하였다. 에러(error) : 프로그램 코드에 의해서 수습될수 없는 심각한 오류 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 오류 자바에서 오류는 아래와 같은 상속 구조를 갖는다. 모든 예외(Exception)는 Exception클래스의 상속을 받고 있고 예외는 크게 두개로 나눌수 있다. RuntimeException클래스와 그 자손들 Exception클래스와 그 자손들(RuntimeException제외) 프로그래머의 실수로 발생 예외처리가 강제되지 않음 사용자의 실수 같은 외적인 요소로 ..
클래스 간의 관계 선택 팁
자바의 정석 책을 읽다가 굉장히 유용하다고 생각하는 정보가 나와서 요약해보았다. 클래스간의 관계 1.상속관계 상속관계는 말 그대로 한 클래스가 다른 클래스를 상속한 경우를 말한다. 상속을 받은 쪽은 자식 클래스가 되고, 상속을 해준 쪽은 부모 클래스가 된다. class Parent { } class Child extends Parent { // ... } 특징으로는 자식 클래스는 부모클래스의 요소를 물려받는다는 점이있다. 즉 코드의 중복을 막고 관리가 용이해진다는 특징이 있다. 부모클래스가 변경되면 자식클래스는 영향을 받게 되지만, 자식클래스가 변경되어도 부모클래스에 영향을 미치지는 않는다. 또한 자식 클래스로 오면서 부모의 멤버를 덮어쓸 수도 있다. 또한 아래와 같은 특징도 있다. 생성자와 초기화 블럭..
초기화 블럭
초기화 블럭에는 두가지 종류가 있다. 클래스 초기화 블럭 인스턴스 초기화 블럭 1.클래스 초기화 블럭 클래스 안에 단순히 static{ }안에 내용을 작성하면 된다. 클래스가 로딩될 때 먼저 실행된다. 클래스 변수를 초기화 할때 사용한다. 2.인스턴스 초기화 블럭 { }안에 내용을 작성하면 된다. 생성자가 호출될때 생성자보다 선행해서 실행된다. 인스턴스 변수를 초기화 할때 사용한다. 예를 들어 보자 class InitTest{ static int cv = 1; int iv = 1; static { cv = 2; } //클래스 초기화 블럭 { iv = 2; } //인스턴스 초기화 블럭 InitTest () { //생성자 iv = 3; } } 실행 순서는 다음과 같다. 클래스 초기화 인스턴스 초기화 기본값 ..
생성자를 이용한 인스턴스 복사
클래스 생성자를 이용해서 다른 인스턴스를 복사하는 방법은 다음과 같다. 1. class Car{ String color; String gearType; int door; Car(String color, String gearType, int door) { this.color = color; this.gearType = gearType; this.door = door; } Car(Car c) { this.color = c.color; this.gearType = c.gearType; this.door = c.door; } } 2. class Car{ String color; String gearType; int door; Car(String color, String gearType, int door) { t..
생성자에서 다른 생성자 호출하기
생성자 간에도 서로 호출이 가능하다. 대신 두가지 조건이 있다. 생성자의 이름 대신 this()를 사용한다 반드시 첫줄에만 호출이 가능하다. 아래는 그 예시이다. class Car{ String color; String gearType; int door; Car() { this("white","auto",4); } Car(String color) { this(color, "auto", 4); } Car(String color, String gearType, int door) { this.color = color; this.gearType = gearType; this.door = door; } } 이와 같이 생성자의 첫줄에 this를 써서 다른 생성자를 호출 할 수 있다. 이렇게 하면 수정하기 용이하다 ..
Optional 개념 및 사용법
NPE(NullpointerException) 이 에러를 피하기 위해서는 null 검사를 해야하는데 그 과정이 굉장히 복잡하다. 따라서 Optional이라는 개념이 나왔다. Optional Java8부터는 Optional라는 클래스로 NPE를 방지할 수 있게 해준다. Null이 올수 있는 값을 감싸는 클래스이다. 클래스 내부의 private final 변수에 값을 저장하기 때문에 NPE가 발생하지 않게 도와준다. 또한 여러가지 유용한 메서드를 사용하게 해준다. 생성 Optional.empty() : 값이 Null인 경우 생성하기 Optional optional = Optional.empty(); System.out.println(optional); // Optional.empty System.out.pr..
기본형 매개변수와 참조형 매개변수
https://better-clean-fast.tistory.com/9 지역 변수 착각 기초 알고리즘을 공부하던 중 아래와 같은 배열의 순서를 거꾸로 뒤집는 코드를 작성해보았다. import java.util.Scanner; public class ReverseArray { //자리를 바꾸는 method static void swap(int[] a,int idx.. better-clean-fast.tistory.com 이전 나의 글에 대해 해답을 알게 되어서 보완된 지식을 올린다. 자바에서는 메서드를 호출할 때 매개변수로 지정한 값을 복사해서 넘겨준다. 매개변수의 타입이 기본형일 경우 기본형의 값 이 복사되겠지만, 매개변수의 타입이 참조형인 경우 인스턴스의 주소가 복사된다. package project;..