programming language 75

[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..

[Java] 익명 클래스(Anonymous Class)

지난번 Local Class(로컬 클래스) 에 이어서... 드디어...! 익명 클래스와 람다에 대해 알아보려고 한다. 원래는 단순하게 익명 클래스에 대해서만 알아보려고했는데, 람다가 자주 비교대상으로 쓰이기에 람다를 추가해서 보려니 관련 정보(inner class, local class, enclosing class 등...)에 관한 지식이 튀어나와서 이를 먼저 알아보았다 휴... 이번에도 역시 공식문서를 중심으로 읽어나갈 계획이다. 1. 익명클래스 (Anonymous Class)익명 클래스는 우리 코드를 더 정확하게 만들 수 있도록 한다. 동시에 클래스를 선언하고 인스턴스화 할 수 있도록 한다. 마치 이름이 없는 지역 클래스(local class) 같다. 만약 로컬클래스를 한 번만 사용할거면 익명..

[Java] : Local Class알아보기

지난 글에서 Nested Class와 Inner Class가 뭔지 공식문서를 읽어 보았는데, 이어서 Local Class, Anonymous Class 그리고 Lambda 에 대해 읽을 예정이다. 0. Enclosing Class?Enclosing Class는 바디 안에 다른 클래스를 포함하고 있는 클래스이다. 그런데 생각해보니 Outer class도 있자나? 이전에 Inner class에 대해 공부할 때 Inner class의 외부 클래스를 Outer class라고 부를 수 있는데 enclosing class와 outer class가 뭐가 다른지 이번에는 GPT의 힘을 빌려보았다. 키메라 : 두 개는 비슷한데 뭐가 다른거야?MyClass.javapublic class MyClass { void ..

[Java] : Nested Class 와 Inner class

오늘도 고군분투하는 우리의 키메라! 캬오! 원래는 람다에 대해서만 알아보려고 했는데, 공부하다보니 먼저 Nested Class와 Inner Class에 대해 알아보려고 한다. 다 이해하고 외워버려!1. 중첩 클래스(Nested class)우선 inner class를 알기 위해서는 Nested Class에 대해 먼저 알아야 한다. 자바 프로그래밍 언어는 다른 클래스 안에 클래스를 정의할 수 있는데 이러한 클래스는 중첩 클래스(nested class)라고 한다. class OuterClass { ... class NestedClass { ... }} 여기서 Nested class는 non-static와 static이라는 두 개의 카테고리로 나눌 수 있는데, Non-static n..

[Java] ForkJoinPool 알아보기

전에 Future랑 CompletableFuture에 대해 간단히 알아보았다. 이번에는 ForkJoinPool에 대해 알아보고자 한다. 지난 글에서 Future, FutureTask, CompletableFuture 에 대해 공부를 사알~짝 했었는데 이 내용을 보고 해당 글을 보면 더 이해가 잘 될 것이다. (지난 내용 클릭) 1. Fork? Join? ExecutorSerivce? ForkJoinPool? Java 7에서부터 Fork/Join 프레임워크를 도입했다. 사용 가능한 모든 프로세서 코어를 사용하여 병렬 처리 속도를 높이는 데 도움이 되는 도구를 제공하는데 이는 분할 및 정복 접근 방식을 통해 달성된다. Fork 비동기식으로 실행될 수 있을 만큼 단순해질 때 까지 작업을 더 작은 독립 하위 작..

[Java] 스레드 - Future, FutureTask, ComplatebleFuture?

최근에 스레드에 대해 공부를 진행하고 있다. 그런데 Future, FutureTask, ComplatableFuture 관련해서 필자가 잘 이해를 못하고 있다. 그래서 이를 정리하고자 한다. 1. Future? Oracle에서는 공식 문서에서 future에 대해 다음과 설명하고 있다. Future는 비동기 계산의 결과를 나타냅니다. 계산이 완료되었는지 확인하고, 완료될 때까지 기다리고, 계산 결과를 검색하는 메서드가 제공됩니다. 결과는 계산이 완료되었을 때 get 메소드를 사용해서만 검색할 수 있으며 필요한 경우 준비될 때까지 차단됩니다. 취소는 cancel 메소드로 수행됩니다. 작업이 정상적으로 완료되었는지 또는 취소되었는지 확인하기 위한 추가 메서드가 제공됩니다. 계산이 완료되면 계산을 취소할 수 없..