전체 글 127

소프트웨어 공학

야크의 털깍기란? 야크라는 가축은 몸을 뒤덮고 있는 털이 매우 많습니다. 여름이 되기 전에 털을 깎아주어야하는데 몸통의 털을 깎기까지 상당히 많은 양의 털을 깍아야합니다. 개발자가 하나의 문제에 몰두하다보면 마치 위와 같은 상황에 마주할 때가 있습니다. 어떤 문제를 해결하려고 봤더니, 다른 문제가 계속 나와 좀처럼 몸통에 해당하는, 해결하고자 하는 문제의 해결에 도달하지 못하려고 하는 상황입니다. 이를 막기 위해서는 복잡한 코드를 읽거나 쓸때는 메모해 가며 작업하는 것이 좋습니다. 혹은 시간이나 비용을 고려하거나 목적을 고려했을 때 맞지 않다면 작업을 멈추고 다른 길을 찾아보는 것도 방법입니다. 조슈아 나무의 법칙이란? 어떤 사람이 식물도감에서 조슈아 나무를 처음으로 알게 되었습니다. 책을 읽으며 그 사..

카테고리 없음 2024.03.04

Dynamic Programming이란?

다이나믹 프로그래밍이랑 동적으로 프로그램을 수행 시키는 것으로 써 현재 수행한 프로그래밍의 결과를 저장하고 후에 수행될 프로그래밍의 결과를 저장 하는것 같습니다. 장점으로는 이전에 계산했던 결과를 가지고 수행하기에 더 빠른 처리가 가능 할것 같습니다. 단점으로는 결과를 저장하기 위한 메모리가 필요합니다. N = int(input()) D = [0, 1] for i in range(2, N + 1): D.append(D[i-2] + D[i-1]) print(D[N]) **동적 프로그래밍(Dynamic Programming)**은 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법입니다1. 이 방법은 주어진 문제를 여러 개의 하위 문제(subproblem)로 나누어 푼 다음, 그것을 결합하여 최종적인 ..

IO 패키지 소개 및 입력, 출력 스트림 [IO 기반 입출력 및 네트워킹]

프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번히 일어난다. 데이터는 사용자로부터 키보드를 통해 입력 될 수도 있고, 파일 또는 네트워크로부터 입력 될 수도 있다, 데이터는 반대로 모니터로 출력 될 수도 있고, 파일로 출력되어 저장 될 수도 있으며 네트워크로 출력되어 전성 될 수도 있다. 자바에서 데이터는 스트림(Stream)을 통해 입출력되므로 스트림의 특징을 잘 이해해야 한다. 스트림은 단일 방향으로 연속적으로 흘러가는것을 말하는데. 물이 높은 곳에서 낮은 곳으로 흐르듯이 데이터는 출발지에서 나와 도착지로 들어 간다는 개념이다 입력 스트림과 출력 스트림 프로그램이 출발지냐 또는 도착지냐에 따라서 스트림의 종류가 결정되는데, 프로그램이 데이터를 입력 받을 때에는 입력 스트림(In..

병렬 처리

병렬 처리(Parallel Operation)란 멀티코어 CPU 환경에서 하나의 작업을 분할해서 각각의 코어가 병력적으로 처리하는 것을 말하는데, 병렬 처리의 목적은 작업 처리 시간을 줄이기 위한 것이다 자바 8부터 요소를 병렬 처리할 수 있도록 하기 위해 병렬 스트림을 제공하기 때문에 컬렉션(배열)의 전체 요소 처리 시간을 줄여준다 동시성(Concurrency)과 병렬성(Parallelism) 멀티 스레드는 동시성(Concurrency) 또는 병렬성(Parallelism)으로 실행되기 때문에 이 용어 들에 대해 정확히 이해하는 것이 좋다. 이 둘은 멀티 스레드의 동작 방식이라는 점에서는 동일하지만 서로 다른 목적을 가지고 있다 동시성은 멀티 작업을 위해 멀티 스레드가 번갈아가며 실행하는 성질을 말하고 ..

수집(collect())

스트림은 요소들을 필터링 또는 매핑한 후 요소들은 수집하는 최종 처리 메소드인 collect()를 제공하고 있다. 이 메소드를 이용하면 필요한 요소만 컬렉션으로 담을 수 있고, 요소들을 그룹핑한 후 집계(리덕션)할 수 있다 필터링한 요소 수집 Stream의 collect(Collector collector) 메소드는 필터링 또는 매핑된 요소들은 새로운 컬렉션에 수집하고 리턴 매개값인 Collector(수집기) 어떤 요소를 어떤 컬렉션에 수지 할 것인지를 결정 Collector 의 타입 파라미터 T는 요소이고, A는 누적기(accumulator)이다, 그리고 R은 요소가 저장될 컬렉션이다, 풀어서 해석하면 T요소를 A누적기가 R에 저장한다는 의미 이다. Collector의 구현 객체는 다음과 같이 Coll..

커스텀 집계(reduce())

커스텀 집계() 스트림은 기본 집계 메소드인 sum(), average(), count(), max(), min() 을 제공하지만, 프로그램화해서 다양한 집계 결과물을 만들 수 있도록 reduce() 메소드도 제공한다. 각 인터페이스에는 매개 타입으로 XXXOperator, 리턴 타입으로 OptionalXXX, int, long, double 을 가지는 reduce() 메소드가 오버로딩 되어있다. 스트림에 요소가 전혀 없을 경우 디폴트 값인 identity 매개값이 리턴된다. XXXOperator 매개값은 집계 처리를 위한 람다식을 대입하는데, 예를들어 학생들의 성적 총점은 학생 스트림에서 점수 스트림으로 매핑해서 다음과 같이 얻을수 있다 int sum = studentList.stream().map(S..