전체 글 109

[오브젝트] self 참조와 super 참조

행동 관점의 상속 행동 관점의 상속이란 '부모 클래스의 상태 뿐 아니라 메서드까지 자식 클래스에 포함할수 있다는 것'에 포커스를 둔 관점이다. 상속 관계로 연결된 클래스 사이의 메서드 탐색 과정을 이해하는 것이 가장 중요하다. 객체의 경우 서로 다른 상태를 저장할 수 있도록 Heap 메모리에 각 인스턴스마다 독립된 메모리 공간을 가진다. 하지만 메서드의 경우 동일한 클래스의 인스턴스끼리 공유가 가능하기 때문에 클래스는 한 번만 메모리에 로드하고 각 인스턴스 별로 클래스를 가리키는 포인터를 갖게 하는것이 메모리 효율성 측면에서 경제적이다. 메시지를 수신한 객체는 class 포인터로 연결 된 자신의 클래스에서 적절한 메서드가 존재하는지 찾는다. 만약 적절한 메서드가 존재하지 않으면 parent 포인터를 따라..

오브젝트 2024.03.11

2024 상반기(3 ~ 8월) 공부 계획

야놀자 테크스쿨을 수료하고 받은 혜택으로 패스트캠퍼스 올플랜 수강권을 6개월간 제공받았다. 개발 관련 강의들이 정말 많은데, 카테고리 별로 나누어봤다. 내가 생각하는 (주니어)백엔드 개발자로써 가장 중요한 능력은 1. Java, 2. 실무(문제해결)능력, 3. 인프라(Devops) 능력이라고 생각한다. 현재 공부하고 있는 오브젝트, 모던자바인액션을 다 공부하면 추가로 아래 명시한 자바 심화 강의를 빠르게 들을 생각이다. (강의시간이 그렇게 길지 않다.) + 자바성능튜닝이야기 책 그리고 나서 대용량데이터&트래픽 처리 초격차 패키지 강의를 수강하면서 EhChache, Redis, 인덱스, 락 등의 기법들을 왜 사용하는지, 어떤 상황에서 사용해야 하는지, 사용하면 어떤 것이 좋은지 등을 학습할 예정이다. 이 ..

일기 2024.03.04

[모던 자바 인 액션] 함수형 인터페이스에 람다식 전달하기

Prologue 함수형 인터페이스란 구현체에서 구현해야 할 추상메서드가 '오직 단 1개'만 존재하는 인터페이스를 말한다. @FunctionalInterface라는 어노테이션으로 추상메서드를 단 하나만 선언하도록 강제할 수 있다. Predicate를 비롯한 함수형 인터페이스를 살펴보니, 추상메서드가 단 하나만 선언되어 있지 않았다. 이 부분은 찾아보니 Default 메서드? 라는 개념인 것 같은데, 아직 공부를 해보지 않아서 추후에 관련 내용을 포스팅 하도록 할 것이다. Junit5를 기반으로 한 테스트코드를 작성하며 함수형 인터페이스와 람다식을 사용해서 간결한 코드를 만드는 방법을 실습해보았다. 어떻게 함수형 인터페이스에 람다식을 전달할 수 있는 것인가? 함수형 인터페이스는 구현해야 하는 추상메서드가 단..

[오브젝트] 캡슐화를 지키는 방법 (객체의 행동을 결정하라)

설계 품질과 트레이드 오프 설계 품질의 척도 → 캡슐화, 응집도, 결합도 캡슐화 객체 내부의 구현을 외부로부터 감추기 위해서 구현을 왜 감추는가? 구현이란 변경될 가능성이 높은 부분을 뜻한다. 객체를 사용하여 변경될 여지가 높은 부분을 숨기고, 안정적인(추상화된) 인터페이스만 외부에 public 하게 공개함으로써 변경에 대한 여파를 통제할 수 있다. 설계가 필요한 이유 → 요구사항이 변경되기 때문 캡슐화가 중요한 이유 → 불안정한 부분과 안정적인 부분을 분리해서 변경의 영향을 통제할 수 있기 때문 변경될 수 있는 어떤 것이라도 캡슐화 해야한다. 응집도와 결합도 응집도란 모듈에 포함된 내부 요소들이 연관돼 있는 정도를 나타낸다. 모듈 내 요소들이 긴밀하게 협력하면 응집도가 높은 것 결합도란 의존성의 정도를..

오브젝트 2024.02.21

[모던 자바 인 액션] 2. '동작 파라미터화'란?

동작 파라미터화 동작 파라미터화는 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다. 쓸데없는 코드가 늘어난다는 단점이 있다. 람다식 을 사용하여 코드를 간결하게 할 수 있음 기존의 문제점 public static List filter(List inventory,int weight) { List result = new ArrayList(); for (Apple apple : inventory) { if (apple.getWeight() > weight)) { result.add(apple); } } return result; } 위 코드는 파라미터로 전달 된 무게 이상의 사과만 필터링 하는 메서드이다. 하지만 색깔 기준 필터링, 색깔과 무게를 함께 필터링 하려면? 전략패턴을 사용 public interf..

내가 생각하는 객체지향의 본질

조영호 님의 '객체지향의 사실과 오해'를 다 읽고 '오브젝트'를 읽고 있는 중이다. 그리고 '모던 자바 인 액션'을 읽으면서 자바의 언어에 대한 이해도를 높이고자 했다. 그런데 객체지향에 대한 책과 Java 언어에 대한 책을 동시에 읽다보니, 객체지향의 사상과 자바의 발전과정이 공통의 목적을 가지고 있다는 생각이 들어서 글을 작성한다. 내가 생각하는 객체지향(OOP)의 본질 자바는 객체지향이라는 사상에 기반을 두고있다. 객체란 '상태'와 '행위'를 동시에 가질 수 있다. 객체는 자율성을 가지며 다른 객체와 유기적으로 협력한다. 그리고 '추상화'와 '다형성'이라는 도구를 제공한다. 추상화는 '잘 변하지 않는 부분'을 추상클래스나, 인터페이스와 같은 형식으로 추상화하여 구현을 뒤로 미루는 것이다. 다형성(P..

오브젝트 2024.02.16

[모던 자바 인 액션] 1. 자바의 발전 과정에 대하여

자바의 역사적 흐름 초기 대부분의 자바 프로그램은 싱글코어를 사용함 빅데이터를 활용하기 위해 멀티코어 사용의 필요성이 대두 됨 스레드를 사용하고자 함 하지만, 관리가 어렵다는 단점이 있음 병렬 실행환경을 쉽게 관리하고 에러가 덜 발생하는 쪽으로 진화 자바 8에서 병렬 실행을 단순하게 접근할 수 있는 방식을 제공 자바8은 간결한 코드, 멀티코어 프로세서의 쉬운 활용이라는 두 가지 요구사항 기반 스트림 API가 등장함 스트림이라는 개념으로 인해 메서드 참조, 람다, 디폴트 메서드가 존재할 수 있음 메서드에 코드를 전달하는(동작 파라미터화)는 함수형 프로그래밍에서 위력 발휘함 스트림 처리 스트림이란 한번에 한 개 씩 만들어지는 연속적인 데이터 항목들의 모임. 이론적으로는 입력스트림에서 데이터를 읽으면 출력스트..

객체의 책임과 협력 - 커피 주문 예제를 직접 만들어보자

Prologue 오브젝트 2장까지 읽고, 객체지향의 사실과 오해 책을 집어들었다. 오브젝트와 객체지향의 사실과 오해는 모두 조영호 님이 쓴 책이다. 객체지향에 대해 더 잘 이해하기 위해서는 오브젝트를 한번 더 읽는 것 보다 같은 저자의 다른 책을 읽는 것이 더 도움이 될 것 같았다. 객체지향의 사실과 오해에서는 객체의 책임, 협력을 설명하는 챕터에서 커피 주문 예제를 기반으로 한다. 내가 얼마나 이해하고 있는지 체크하기 위해서 정답지를 보지 않고 먼저 코드를 작성해보았다. 객체간의 관계 아래 그림처럼 클래스를 작성하기 전에 1. 메시지를 먼저 생각 2. 메서드는 메시지를 수신하는 쪽에서 응답하는 하나의 매뉴얼이자 방식 3. 객체의 책임을 확실하게 분리 라는 나름의 원칙을 세워서 코드를 작성하고자 노력..

오브젝트 2024.02.15

[오브젝트] 상속과 합성 그리고 인터페이스

1. 상속 (Inheritance) 예를 들어, 할인정책이 없는 영화가 있다고 가정해보자. Movie 클래스에서 할인 된 요금을 계산하는 메서드에 아래와 같이 if 문을 추가해서 discountPolicy가 존재하는지 존재하지 않는지 검증하는 로직이 추가된다. 이러한 방식은 일관된 협력을 무너뜨리는 방식이다. 기존에는 할인된 가격을 계산하는 책임이 discountPolicy의 자식클래스에 있었지만, 할인정책이 없는 경우라면 Movie클래스의 책임이 되고 만다. 어떻게 책임을 일관되게 유지할 수 있을까? //할인요금 반환 public Money calculateMovieFee(Screening screening) { if (discountPolicy == null){ return fee; } return ..

오브젝트 2024.02.13

[오브젝트] 다형성(객체의 협력)

오브젝트 2장은 '영화 예매 시스템'이라는 예제를 기반으로 다형성에 대해 설명하는 장이다. 아래와 같이 할인 정책은 정액 할인 정책과 비율 할인 정책으로 구성되어 있고, 하나의 할인정책은 여러 할인 조건을 포함할 수 있다. 할인조건은 순번 할인 조건과 기간 할인 조건으로 구성되어 있다. 이 장을 읽어보니 핵심적으로 말하고자 하는 바는 '변화에 대응 가능한 유연한 설계를 할 수 있는 기법'에 대해 상속과 합성 두 가지 방식을 비교 분석하면서 각각이 어떤 장단점을 가지는지에 대해 설명한다. 상속과 합성에 앞서 객체의 협력에 대한 내용에 대해 잠시 서술하고 본론으로 들어가도록 하겠다. 1. 객체의 협력 기본적으로 객체의 내부 상태는 외부에서 접근하지 못하도록 감춰야 한다. 대신 객체 외부에 공개된 public..

오브젝트 2024.02.13