programming language/Java 36

[Java] 객체지향 연습 7 - 요금 기능 추가하기 (feat. 개인적인 생각과 향후 방향)

지난 글에서는 공부할 프로젝트에 대해 학습하고, 어느 기능을 추가할 것인지 고민했고 이를 위해 데코레이터 패턴과 책임 연쇄 패턴에 대해 알아보았다. (궁금하면 여기 클릭!) 이번 시간에는 요금 기능과 알림 기능을 추가하려고 하는데...! 생각해보니 지난 글에서 알림 기능은 내가 고민했는데 말만 하고 넘어가버리고 말았다. 요금 기능을 직접 구현하기 전에, 알림 기능을 위한 디자인패턴을 알아보고, 실제 코드를 확장할 것이다. 사실 객체지향을 연습하기 위해서는 코드를 직접 작성하고 학습해야 하는데, 일일히 이것을 복붙하고 설명하는것이 애매하다고 생각했다. 그래서 과감히 전부 제거했고, 해당 작업들에 대한 코드와 히스토리는 다음 Git Branch에서 다 확인할 수 있다(코드 보고싶으면 여기 클릭!) 목표1...

[Java] 객체지향 연습 6 - 프로젝트 구성 및 기본 코드 학습 그리고 데코레이터, 책임연쇄 패턴 복기 (feat. 템플릿 메서드 패턴)

지난 시간에는 객체지향 연습을 위한 프로젝트를 구성하기 위한 전단계로 여러 개념을 학습했다.(이전 내용이 궁금하면 여기 클릭!) 이번 글에서는 지난 시간에 이어 학습용 프로젝트 구성을 이어서 진행할 예정이다. 시작하기에 앞서서 나의 생각을 좀 적어보도록 하겠다. 해당 프로젝트는 JPA나 부가적인 기술들은 전혀 고려하지 않았다. 다만 초기 학습을 위해서는 순수하게 Domain 주도로 개발을 진행하는 것이 맞다고 생각을 했다. 현실에서 실제 개발을 한다고 하면, 솔직히 기술 스펙이 바뀌지는 않을것이다. 이미 잘 돌아가고 있는 프로젝트에 한국에서 누가 이걸 새롭게 다 하고 싶은 경우가 있는지 반문을 해보았다. 이미 서비스중인 기술을 큰 리소스를 들이면서 새로운 기술을 적용하는것은 좋을 수 있지만, 그에 ..

[Java] 객체지향 연습 5 - 상황 부여와 코드 작성 전 간단한 지식 학습 (feat. DDD를 곁들인)

Program to an interface, not an implementation. => 구현이 아닌 인터페이스에 맞춰 프로그래밍하라.출처 : GoF(Gang of Four)의 《디자인 패턴 (Design Patterns: Elements of Reusable Object-Oriented Software)》 객체지향 관련 글은 2025년 9월 이후로 작성하지 않고 있었는데 정말 오랜만에 작성한다. (지난 글이 궁금하면 여기 클릭!) 그동안 Netty를 중심으로 학습이 진행되었고, AWS 자격증 취득을 목표로 하다보니 사실 흥미를 느끼지 못했다. 하지만 OOP에 준수한 코드를 작성하고, 이를 Netty에 모듈로 붙여서 작동하는 코드롤 만들 예정이다. 해당 코드의 작업들은 oop-ddd-test-pro..

[Java] 객체지향 연습 4 - 서비스에 대한 이해와 Layered Architecture 적용(feat. Spring 공식문서)

지난 글에서 SOLID와 디자인 패턴에 대해 알아보았다. (여기 클릭!) Java 섹션이지만, 가장 먼저 트랜잭션 스크립트에 대해 알아보고 Spring 공식문서에서 소개하는 각각의 Stereotype Annocation인 @Controller, @Service, @Repository를 알아보고 DDD와 OOP를 어떻게 섞어야 하는지를 알가볼 것이다. 한국에서 자바 개발자는 대부분 스프링 쓰자나? 해당 내용도 자바/스프링 개발자를 위한 실용주의 프로그래밍 을 많이 참고했으니 꼭! 구매를 바란다. 그럼... 후비고...!!! 유노윤호가 말했지... 우리에게 가장 해로운 해충은 대충이다. 대충 하지 말고 제대로 해보겠다 ㅠㅠ... 1. 액티브 레코드(Active Record) vs 트랜잭션 스크립트(Tr..

[Java] 객체지향 연습 3 - SOLID 원칙과 디자인패턴

지난 시간에는 행위로 코드를 설계하는 것에 대해 알아보았다. (여기 클릭) 이번 시간에는 단순 행위 설계에서 더 나아가 SOILD 에 대해 다시 알아보고, Interface를 활용해서 어떻게 객체지향스러운 코드를 작성할 수 있는지 알아보고자 한다. 이번에도 최대한 공식 영어 명칭에 대해서 분석하고 보려고 한다. 흐름은 실용주의 프로그래밍 책을 따라갈 것이다. 1. SOLID 분석아오.... solid 정말 많이 들어봤다. 그런데 사실 직접 뜻에 대해서 분석은 안햇던 것 같다. 단순히 암기를 한거지? 으으음...!!! 그래서 필자는 현재 다시 이를 훑어보려고 한다. Single Responsibility Principle단일 책임의 원칙은 하나의 모듈이 하나, 그리고 오직 하나의 액터에 책임이 있어야..

[Java] 객체지향 연습 2 - 행위로 코드 설계하기

지난 글에서는 객체지향에 대해 간단하게 알아보았다. 이번에는 TDA원칙을 통해 객체가 어떻게 능동적으로 동작하도록 하는지 학습하려고 한다. 만화나 그런걸 보면 꼭 악당이 지면 뒤에 더 강한 악당들이 이런말을 한다. 크크큭...! 그 녀석은 우리중에 최약체였지...! 하면서 친절하게 주인공이 최강이 될 때까지 맞춤으로 싸워주는 악당들... 그렇다... 사실 이전 글도 마찬가지로 흔히 이야기하는 가장 약한 녀석이었다. 1. 덕 타이핑과 TDA이전 글에서는 그냥 객체지향 식으로 하면 된다~ 이런 식으로 햇지만 이번에는 좀 더 행동을 어떻게 하냐에 따라서, 객체지향 개발을 쉽게 할 수 있도록 덕 타이핑과 TDA에 대해 먼저 알아보려고 한다. 덕 타이핑(duck typing)은 동적 타이핑의 한 종류로, 객체..

[Java] 객체지향 연습 1 - 상황 부여와 객체지향 예시

신성한 주말에 오래된 게임인 문명6를 혼자하는, 싱글 게임을 하던 싱글남 키메라... 게임도 이제는 그렇게 막... 재미있지는 않고 오히려 머리쓰는게 더 재미있어졌다. 아무래도 나이를 먹은건가...? ㅠㅠ... 하여간... 최근에 자바/스프링 개발자를 위한 실용주의 프로그래밍 이라는 책을 읽었는데, 객체 지향적인 코드라고 하는 예시를 그냥 보고... 읽다보고 따라도 치지만 뭔가 아직도 성에 안차고 이해가 안된다. 그래서 간간히 상황 부여하면서 연습겸 하나 코드좀 만들어 보려고 한다. 해당 책을 너무 재미있게 읽은 애독자로서 책의 내용도 많이 인용하고 이를 통해서 정말 어떻게 코드를 작성해야 SOLID 원칙에 입각해서, 정말 좋은 코드를 작성할 수 있는지 연습하려고 한다. 글을 적는 순서는 책의 흐름..

[Java] Stream(스트림) - 2탄

지난번에 Stream1에서 읽다가 말았는데, 이번에는 stream을 Parallelism 부터 이어서 읽어보도록 하겠다. 이를 이해하는데 thread관련 글을 읽으면 좀 더 도움이 될 것이다. 잠시 기억 복기... Steam이란?자바에서의 스트림은 뭔가 데이터 요소들의 연속, 즉 데이터 파이프 라인을 만들어서 데이터를 다루도록 도와주는 도구 데이터 파이프라인? 데이터의 수집부터 처리, 변환, 저장에 이르기까지 일련의 단계를 거치는 과정 Stream의 특징?No storage, Funtional in nature, Laziness-seeking, probably unbounded, consumable! 1. Parallelism(병렬성)명확히 for-loop을 가지고 원소들을 처리하는건 순차적이다. ..

[Java] 람다 표현식(Lambda Expreesion) - 2탄

지난 람다 표현식 1탄에 이어서 이번에는 뒤의 글을 더 읽어보도록 하겠다. 2. 람다 표현식의 이상적인 사용 케이스(Ideal Use Case For Lambda Expressions) 8부터~접근 8: 더 확장해서 Generic을 사용하기이전 코드에서 보았던 processCarsWithFunction 을 다시 보자. 다음은 어떤 데이터 타입의 요소라도 포함하는 컬렉션을 매개변수로 받는 제네릭 버전이다. public static void processCarsWithFunction( Iterable source, Predicate tester, Function mapper, Consumer block) { for (X p : source) { ..

[Java] 스트림(Stream)이란? - 1탄

공식문서 읽기 본부의 수장이 되고자 하는 우리의 공대키메라! 이번 시간에는 스트림에 대한 공식 문서를 읽어보고 정리할 것이다. 그럼 후비고~ 1. Stream이란? A sequence of elements supporting sequential and parallel aggregate operations.순차적 및 병렬 집계 작업을 지원하는 요소들의 시퀀스 그러니까, 순차적 및 병렬 집계 작업을 지원하는 요소 시퀀스라는데... 와닿지가 않는다. 위에 사전에서 봤듯이 일반적인 의미는 뭔가 흐름을 의미한다. 컴퓨터 사이언스에서는 다음과 같이 설명한다 In computer science, a stream is a sequence of potentially unlimited data elements mad..