본문 바로가기

기타25

[이펙티브자바] 8.메서드 1. 매개변수가 유요한지 검사하라. 1.1. 메서드 몸체가 수행되기 전에 매개변수를 검사하라.(assert, requireNonNull 등 사용) 2. 적시에 방어적 복사본을 만들어라. 2.1. 외부에서 수정가능하지 못하게 방어적 코드를 작성하라. 더보기 import java.io.IOException; import java.util.Date; class Main { public static void main(String[] args) throws IOException { Date start = new Date(); Date end = new Date(); Period period = new Period(start, end); end.setYear(78); // period의 내부를 수정 System.o.. 2022. 8. 6.
[이펙티브자바] 7.람다와 스트림 1. 2. 람다보다는 메서드 참조를 사용하라. 2.1. 메서드 참조가 람다보다 더 간결한 경우 메서드 참조를 이용해라. 2.2. 메서드 참조는 5가지의 유형이 있다. 더보기 유형 메서드 참조 람다 Static Integer::parseInt str -> Integer.parseInt(str) Bounded Instant.not()::isAfter Instant instant = new Instant.now() t -> instant .isAfter(t) UnBounded String::toLowerCase str -> str.toLowerCase() Class Constructor TreeMap::new () -> new TreeMap() Array Constructor int[]::new len -> .. 2022. 7. 25.
[이펙티브자바] 5.제네릭 1. Raw타입은 사용하지 말아라 1.1. Raw 타입(타입 매개변수가 없는 제네릭 타입)을 사용하면 제너릭의 안정성과 표현력을 잃게 된다. 더보기 public class EffectiveJava { private final Collection stamps = new ArrayList(); // 타입을 명시해서 작성 //private final Collection stamps = new ArrayList(); //Compile에는 문제 없으나 Runtime시 ClassCastException 에러 발생 public void main(){ stamps.add(new Coin()); stamps.add(new Stamp()); Iterator iterator = stamps.iterator(); while(.. 2022. 7. 8.
[Kotlin] Sequence vs Collections 안녕하세요. 이번 포스팅에서는 Sequence와 Collections에 대해 알아보려고 합니다. Sequence는 Iterable로 구현된 Collections에서 사용하는 함수의 기능을 수행 하는 class 입니다. 다만 동작방식에서 Collection과 다른데 이전 포스팅에서 list의 Collection map과 flatMap을 비교하면서 Collection은 해당 api의 연산을 모두 마친 후에 다음 결과를 보여주는걸 알 수 있는데요. Sequence 는 오히려 연산을 하나씩 차례대로 진행하는 순서입니다. 공식 사이트에 있는 코드를 예시로 들어보겠습니다. Collection의 함수는 매 api의 모든 결과를 받고 다음으로 넘기게 되어있습니다. 이 과정을 Eagerly Evaluation 이라고 합.. 2022. 7. 5.
SOLID 원칙이란 안녕하세요. 이번 포스팅은 SOLID 원칙에 대해 알아보려고 합니다. SOLID 원칙은 객체지향설계시 지켜져야할 5가지 원칙으로 알려져 있는데 하나씩 알아보겠습니다. 1. 단일 책임의 원칙 : SRP (Single Responsibility Principle) 단일 책임의 원칙은 모든 클래스는 하나의 기능만 가진다 라는 의미입니다. 즉 클래스는 하나의 책임을 수행해야 한다는 뜻입니다. 코드로 예를 보면 만약 게임플레이어중 일반 플레이어와 운영자 플에이어가 있을 때 Player라는 클래스 안에 운영자 기능과 일반 플레이 기능이 같이 있으면 유지보수가 힘들고 기능이 뒤섞여 있기 때문에 이를 하나의 책임만 갖는 클래스로 나누어야 하는 의미입니다. 더보기 //SRP 위배 class Player { val isA.. 2022. 7. 3.
[Kotlin] inline과 reified 안녕하세요. 이번 포스팅에서는 Inline과 reified 키워드에 대해 알아보려고 합니다. inline 키워드는 함수에 붙는 키워드로 많이 볼수가 있는데요. 가령 흔히 쓰이는 Collection 함수에서 forEach 문을 보면 아래처럼 inline을 사용하는 것을 볼 수 있습니다. @kotlin.internal.HidesMembers public inline fun Iterable.forEach(action: (T) -> Unit): Unit { for (element in this) action(element) } inline 이란 뜻을 그대로 해석해보면 line 안에 라는 뜻으로 해석할 수 있는데 이말은 즉 코드를 라인안에 넣는다는 의미로 해석하시면 될 거같습니다. 우리가 고차함수(함수를 para.. 2022. 7. 2.