본문 바로가기

java12

상속과 합성 우리는 공통 코드를 줄이기 위해 상속을 많이 사용한다. 하지만 상속에는 많은 단점들이 존재한다. 공통되는 로직을 줄이기 위해서 상속이 정말 좋은 방법일까? 상속을 사용하면 캡슐화가 깨지고 결합도가 높아진다.예시 코드를 살펴보자. 1주차 미션에서 진행한 로또 코드를 가져왔다. 미션을 했다면 알다시피 로또는 두 가지 종류로 나뉜다. 1) 당첨 번호2) 구매 번호 당첨번호와 구매번호는 매우 비슷하기에 중복되는 코드를 줄이기 위해 상속을 사용해보자. 두 객체의 차이점은 당첨 번호는 bonusNumber라는 추가 필드를 가지고 있다는 점이다.public class Lotto { private int[] numbers; public Lotto(int[] numbers) { this.numbe.. 2025. 3. 17.
Java 의 불변 객체 (final, 방어적 복사, unmodifiable) 우리는 불변 객체를 사용한다. 하지만 예상치 못하게 불변을 깨트리는 악당들이 있다. 예시를 통해 상황을 이해해 보자.public class Name { private final String value; public Name(String value) { this.value = value; } @Override public String toString() { return "Name{" + "value='" + value + '\'' + '}'; }} public class Names { private final List names; public Names(List names) { this... 2025. 3. 13.
Java Custom Exception 우선 해당 글은 자바의 Exception에 대해 알고 있어야 이해를 할 수 있다. 만약 CheckedExcetion, UncheckedException에 대한 개념을 모른다면 다른 곳에서 찾아본 후 글을 읽어보도록 하자. 이번 포스팅은 다음과 같은 내용을 다룬다.1) Custom Exception 사용 이유2) CheckedException, UncheckedException의 선택 기준Custom Exception을 왜 사용해야 할까?이번에 예외처리를 공부하면서 문득 의문이 들었다. Custom 예외를 사용하지 않더라도 이미 Runtime Exception을 상속받는 우리에게 친숙한 예외가 존재한다. ex) IllegalArgumentExcetpion(), IllegalStateException(), .. 2025. 3. 4.
Stream Stream의 단계는 3가지가 있다.1. 생성하기2. 가공하기3. 결과 만들기 생성하기- Array의 스트림 생성String[] arr2 = {"1", "2", "3", "4", "5"};Stream stream = Arrays.stream(arr2); 만약 String이 아닌 int[] 배열이 들어온다면, 자동적으로 IntStream이 생성된다.int[] array = {1, 2, 3, 4, 5};IntStream stream1 = Arrays.stream(array);  - Collection의 스트림 생성Stream stream = arrList.stream(); 스트림 생성은 매우 간단하다. 필자가 느끼기에 자주 쓰인다고 느끼는 Stream은 위의 두 형태지만, 다른 형태의 Stream 또한 생성.. 2025. 2. 25.
함수형 인터페이스 함수형 인터페이스란? java는 기본적으로 객체지향 언어이기 때문에 순수 함수와 일반 함수를 다르게 취급하고 있으며, Java에서는 이를 구분하기 위해 함수형 인터페이스가 등장했다. 람다를 사용하려면 함수가 하나인 인터페이스를 사용해야 하고, 이를 함수형 인터페이스라고 한다.예시를 통해 살펴보자.public interface MyLambdaFunction { int max(int a, int b);}a, b 중 더 큰 값을 고르는 인터페이스가 있다. 이 코드를 구현하면 기본적으로 익명 클래스를 통해 구현할 수 있다. 코드는 다음과 같다public static void main(String[] args) { MyLambdaFunction myLambdaFunction = new MyLambdaF.. 2025. 2. 25.
Thread(3) - volatile, synchronize, lock volatile과 메모리 가시성 문제처음 들어보는 용어다. 이게 뭘까? 영한님의 예시 코드를 보면서 이해를 하는 게 가장 빠르다. 살펴보자. public class VolatileFlagMain { public static void main(String[] args) { MyTask task = new MyTask(); Thread t = new Thread(task, "work"); t.start(); sleep(1000); task.runFlag = false; log("main 종료"); } static class MyTask implements Runnable { boolean runFlag =.. 2025. 1. 19.