728x90

전체 글 199

명령형과 선언형 차이[성능_예시]

1. 성능 차이의 주요 요인명령형 스타일직접적인 상태 변경과 제어를 통해 CPU와 메모리 사용을 최적화할 수 있음.루프를 명시적으로 작성하므로, 추가적인 함수 호출 및 클로저 생성이 없어 오버헤드가 적음.개발자가 모든 세부사항을 제어하기 때문에 성능 최적화가 가능한 경우가 많음.선언형 스타일고수준 추상화로 인해 내부적으로 함수 호출과 추가적인 객체 생성이 발생할 수 있음.함수형 메서드 체이닝(e.g., filter, map, reduce)은 데이터 변환 과정에서 임시 배열이나 메모리 사용량 증가를 초래할 수 있음.코드가 간결해지는 대신, 내부 동작에 대한 최적화는 라이브러리나 런타임에 의존하게 됨(Java의 Stream API 또는 Kotlin의 Sequence 등).2. 예제 비교: 성능 차이 분석1)..

카테고리 없음 2025.01.19

명령형과 선언형 차이[이론]

1. 명령형 스타일에서 함수를 사용하는 경우명령형 스타일은 **"어떻게 수행할지(how)"**를 세부적으로 명시합니다. 함수로 분리하여 코드를 더 읽기 쉽게 만들 수도 있지만, 여전히 실행 순서와 상태 관리를 명확히 드러냅니다.예제// 명령형: 함수로 분리function calculateSum(numbers) { let sum = 0; // 상태를 명시적으로 관리 for (let i = 0; i 특징명령형 스타일은 반복문, 변수 업데이트와 같은 상태 변경을 직접 명시합니다.함수로 분리했더라도 내부적으로 루프와 상태 변화가 명시적으로 나타나며, 이를 통해 결과를 계산합니다.코드의 논리 흐름이 "각 단계별로 명확하게 보이는" 방식입니다.명령형의 본질: "어떻게 동작할지"를 세부적으로 기술합니다.2. 선언..

BackEnd 2025.01.19

함수형 프로그래밍의 장단점

장점1. 병렬 처리 및 동시성에 유리함수형 프로그래밍에서는 불변성과 순수 함수 덕분에 병렬 처리가 안전하며 동시성 문제를 줄일 수 있습니다.Java 예제import java.util.Arrays;import java.util.List;public class FunctionalExample { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); // Stream API를 사용하여 병렬 처리 int sum = numbers.parallelStream() .map(x -> x * 2) // 각 요소를 2배로 ..

BackEnd 2025.01.19

함수형 프로그래밍이란?

함수형 프로그래밍(Functional Programming)은 프로그래밍 패러다임 중 하나로, 프로그램을 수학적 함수의 조합으로 표현하고 **상태 변화와 부수 효과(Side Effect)**를 최소화하는 것을 목표로 합니다. 이 패러다임은 순수 함수를 기반으로 하며, 데이터를 변형하거나 상태를 변경하지 않고 결과를 도출하는 데 초점을 둡니다.핵심 개념순수 함수(Pure Function)동일한 입력에 대해 항상 동일한 출력을 반환하는 함수입니다.외부 상태를 변경하지 않고 부수 효과(Side Effect)가 없습니다.예:// 순수 함수의 예const add = (a, b) => a + b;console.log(add(2, 3)); // 항상 5 반환불변성(Immutability)데이터는 변경되지 않고, 변경..

BackEnd 2025.01.19

[Clean Architecture] 패러다임 개요(구조적, 객체지향, 함수)

클린 아키텍처: 세 가지 프로그래밍 패러다임을 읽고클린 아키텍처를 읽으면서 특히 인상 깊었던 부분은 구조적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍이라는 세 가지 패러다임에 대한 설명이었습니다. 이 패러다임들은 우리가 소프트웨어를 설계하고 개발하는 방식에 깊은 영향을 미쳐왔습니다. 책에서 이를 어떻게 설명했는지, 그리고 제가 이해한 바를 정리해 보았습니다.1. 구조적 프로그래밍 (Structured Programming)가장 먼저 적용된 패러다임이자 현대 소프트웨어 개발의 기초를 다진 구조적 프로그래밍은 1968년 에츠허르 비버 데이크스트라에 의해 제안되었습니다.당시에는 프로그램 내에서 무분별한 goto 문장이 사용되었는데, 이는 프로그램의 흐름을 지나치게 복잡하고 예측하기 어렵게 만들었습니다..

ETC/책 2025.01.07

[Clean Architecture] 서문 및 개요

좋은 코드를 짜기 위한 책 읽기책을 읽으면 얼마나 좋은 내용을 알게 될지 테스트 [독서 후기] 클린 아키텍처 - 좋은 소프트웨어를 위한 원칙과 철학책 소개《클린 아키텍처》의 저자 로버트 C. 마틴(일명 "아저씨(uncle) Bob")은 1964년, 12살의 나이에 처음 코드를 작성하며 개발을 시작했습니다. 반세기에 걸친 개발 경험 속에서 그는 임베디드 시스템, 대규모 배치 처리 시스템, 실시간 시스템, 웹, 콘솔 등 다양한 분야에서 수많은 시스템을 구축하며 소프트웨어 구조화의 원칙을 배워왔습니다.그는 오랜 시간 고민하고 경험한 끝에 소프트웨어 아키텍처의 본질적인 규칙은 변하지 않는다는 사실을 깨달았습니다. 하드웨어는 반세기 동안 급격히 발전했지만, 좋은 아키텍처를 만드는 원칙은 동일하다는 점이 이 책의 ..

ETC/책 2025.01.07

[MySQL] WITH RECURSIVE( 재귀 )

WITH RECURSIVE는 재귀 CTE (Common Table Expression)를 정의할 때 사용하는 MySQL의 기능입니다. 이 기능은 계층적 데이터(예: 조직도, 디렉토리 구조, 그래프 등)를 처리하거나 반복적으로 데이터를 생성해야 할 때 사용됩니다.MySQL에서 WITH RECURSIVE는 8.0 버전 이상에서 지원됩니다.기본 문법WITH RECURSIVE cte_name AS ( -- Anchor 부분: 재귀의 시작점 초기_쿼리 UNION ALL -- Recursive 부분: 반복적으로 실행되는 쿼리 재귀_쿼리)SELECT * FROM cte_name;Anchor 쿼리: 재귀를 시작하는 기본 데이터를 반환합니다.Recursive 쿼리: Anchor 쿼리에서 반환된..

DB 2024.12.16

[ MySQL] WITH 절

MySQL의 WITH 절은 Common Table Expression (CTE)를 정의하는 데 사용됩니다. CTE는 임시 결과 집합으로, 쿼리 내에서 반복적으로 사용하거나 더 가독성이 좋은 쿼리를 작성하는 데 유용합니다.MySQL에서는 버전 8.0 이상에서 WITH 절을 사용할 수 있습니다.기본 문법WITH cte_name AS ( SELECT ... -- 임시 결과를 생성하는 서브쿼리)SELECT ... FROM cte_name;WITH: CTE를 정의하는 시작 부분.cte_name: CTE의 이름.AS: CTE에 대해 서브쿼리를 정의할 때 사용.서브쿼리: CTE에 저장될 데이터 집합.예제 1: 간단한 CTE아래는 직원 테이블에서 특정 데이터를 CTE로 정의하고 활용하는 예입니다.테이블 데이터--..

DB 2024.12.16

[MySQL] 외래키 참조 무결

MySQL에서 외래 키(Foreign Key, FK)를 설정할 때 ON DELETE와 ON UPDATE 옵션은 참조 무결성(Referential Integrity)을 유지하기 위한 동작 방식을 정의합니다.이 옵션들은 부모 테이블의 데이터가 삭제되거나 업데이트될 때, 자식 테이블에서 어떻게 처리할지를 설정합니다.ON DELETE 및 ON UPDATE 옵션 종류1. CASCADE부모 테이블의 행이 삭제되거나 업데이트되면, 해당 외래 키를 참조하는 자식 테이블의 행도 자동으로 삭제되거나 업데이트됩니다.주로 부모-자식 관계에서 데이터가 함께 삭제되거나 변경되어야 할 때 사용합니다.예: 게시글 삭제 시 댓글도 삭제됨.예제 CREATE TABLE parent ( id INT PRIMARY KEY);CREATE..

DB 2024.12.16
728x90