목록자바 (32)
오봉이와 함께하는 개발 블로그
함수형 프로그래밍 외부 상태에 독립적으로 수행되는 함수들의 조합을 코드로 작성하는 방식의 프로그래밍 방식 순수 함수 각 함수는 외부 상태를 알 필요도, 알 수도 없어야 한다. 외부 상태를 모르기 때문에 항상 같은 입력에 대해 동일한 출력을 반환한다. 외부 상태를 변경할 수 없기 때문에 의도하지 않은 부수효과가 발생하지 않는다. 불변성 한 번 생성된 데이터는 변경되지 않고 데이터 변경이 필요할 시 변경된 값이 적용된 새로운 데이터를 생성한다. 일급 객체 함수는 함수 자체로 일급 객체로 취급된다. 함수를 변수에 할당하거나, 다른 함수의 인자로 전달, 함수에서 함수를 반환할 수 있다. 순수 함수 외부 상태 : 함수의 행동에 영향을 미칠 수 있는, 함수 밖에서 변경될 수 있는 변수나 상태 전역 변수 클래스의 인..
개요 문득 Sync & Async / Block & Non-Block에 대해 명확하게 알고 있는지, 남에게 잘 설명할 수 있는지를 생각했는데 자신 없다고 느껴 글로 정리하려 한다. 자칫 같은 개념이라 생각할 수 있지만 둘은 다른 개념이며 당연히 동작 또한 다르다. 나와 같은 질문 혹은 고민을 가진 사람이 이 글을 보고 명쾌하게 답을 얻어갔으면 한다. Blocking & Non-Blocking 먼저 Blocking과 Non-Blocking에 대해 설명하면 이 개념의 관심사는 제어권에 있다. functionA에서 functionB를 호출할 때 Blocking은 functionB를 수행하는 동안 더이상 functionA가 진행되지 않고 대기하는 상황이다. 즉 함수 제어권이 functionB로 넘어가 funct..
상속 상속을 사용하면 슈퍼 클래스의 로직을 서브 클래스에서 그대로 사용할 수 있어 슈퍼 클래스에 공통 로직을 두는 저장소 개념으로 사용할 수 있지만, 너무 일반화 시키면 강한 결합이 발생한다. 코드 아래 코드를 보자 public abstract class DiscountBase { public int price; public int getDiscountedPrice() { int discountPrice = price - 3000; if (discountPrice < 0) { return 0; } return discountPrice; } } public class RegularDiscount extends DiscountBase { } public class SummerDiscount extends D..
강한 결합 - 상속 어설프게 사용하는 상속은 강한 결합 구조를 유도한다. 객체지향을 소개하는 많은 글에서 객체지향의 장점으로 상속을 소개하는 경우가 많은데 잘 사용하면 문제가 없겠지만, 어설프게 사용하면 오히려 독이 될 수 있는 방법이다. 그래서 상속 대신 사용하는 컴포지션을 사용하라는 말이 있다. 상속 문제 - 슈펴 클래스에 의존 먼저 상속의 문제를 알아보자 PhysicalAttack 클래스는 단일 공격과 두번 연속 공격하는 메서드가 존재한다. 해당 PhysicalAttack 클래스는 앞으로 존재할 모든 공격에 대해 부모 클래스로 설계한 클래스다. public class PhysicalAttack { public int singleAttackDamage() { return 10; } public int..
결합도 코드를 작성할 때 중요한 부분은 특정 단위(클래스 혹은 모듈 등이지만, 이제 클래스라고 표현 하겠다) 사이에서 결합도를 낮추는 코드를 작성하는 것이다. 여기서 결합도란 클래스 사이의 의존도라 할 수 있겠다. 클래스A와 클래스B의 결합도가 높다면 높은 확률로(필연적이라 표현해도 문제 없을 거 같다.) 클래스A를 수정할 때 클래스B도 같이 수정해야 할 것이다. 혹은 클래스A만 수정했는데 클래스B에서 원하지 않는 사이드이펙트가 발생할 것이다. 이 외에도 새로운 클래스C를 작성해서 문제를 풀어내야 할 수도 있을 것이다. 보통 우리는 회사를 다닐테고, 회사의 목적은 이윤창출. 즉 회사에서 하는 모든 일은 비용을 생각해야 하기 때문에 유지보수 비용이 낮은 코드를 작성해야 한다. 또한 그래야만 우리 같은 개발..