본문 바로가기

분류 전체보기

(60)
공간 복잡도 공간 복잡도는 입력 크기 n에 따라 알고리즘이 추가로 필요로 하는 메모리의 증가량을 점근적으로 나타낸 것이다. 일반적으로 공간 복잡도는 보조 공간(Auxiliary Space)을 의미하는데, 이는 입력 자체를 담아두는 메모리를 제외한 “알고리즘이 따로 쓰는 메모리” 를 의미한다. (총 공간 = 입력 공간 + 보조 공간) 최근에는 하드웨어의 발달로 인해 공간 복잡도의 중요성이 예전에 비해 많이 낮아졌다. 하지만 대규모 데이터 처리·클라우드 비용·컨테이너 메모리 제한이 있는 환경에서는 공간 복잡도가 여전히 중요한 설계 기준이다. 시간 복잡도와 공간 복잡도는 반비례적인 경향이 있지만 항상 반비례하는 것은 아니다. 이러한 공간 복잡도도 시간 복잡도와 마찬가지로 빅오 표기법을 사용한다. 공간 복잡도 계산법 1..
시간 복잡도 시간 복잡도란 프로그램의 입력 값과 연산 수행 시간의 상관관계를 나타내는 척도이다. 다시 말해 입력 크기 n에 따른 알고리즘의 연산 횟수를 수학적으로 표현한 것이다. 점근적 표기법 n 이 커질 때 알고리즘 실행 시간이 어떻게 늘어나는지를 그 함수의 증가율이라 한다. 이때 상수항과 상수배(계수), 하위 차수 항을 무시하고 증가율만 비교하면 핵심에 집중할 수 있는데, 이를 점근적 표기법(Asymptotic notation) 이라 부른다. 다시 말해 점근적이라는 의미는 가장 큰 영향을 주는 항만 계산한다는 의미이다. 점근적 표기법은 다음과 같이 3가지로 나뉜다. 최상의 경우 : 오메가 표기법 (Big-Ω Notation) [바닥선 : “적어도 이만큼은 걸린다.”]평균의 경우 : 세타 표기법 (Big..
네트워크 인터페이스 네트워크 인터페이스란? 네트워크 인터페이스는 컴퓨터가 네트워크에 연결되도록 하는 하드웨어 또는 소프트웨어 구성 요소를 의미한다. 즉, 네트워크 인터페이스는 물리적 장치(NIC)와 소프트웨어 장치(Loopback, VLAN, Bridge, Bonding)를 모두 포괄하는 포괄적인 개념이다.이러한 네트워크 인터페이스는 컴퓨터 내부의 디지털 데이터를 물리 매체로 변환해 전송하고, 반대로 수신된 물리 신호를 디지털 패킷으로 복원하는 경계 지점 역할을 한다. 네트워크 인터페이스의 위치 (OSI 모델 관점) 네트워크 인터페이스는 OSI 7 계층에서 Layer 2(데이터 링크)와 Layer 1(물리 계층) 경계에 위치하며 주로 다음과 같은 역할을 담당한다. 프레임 캡슐화/역캡슐화: IP 패킷을 Ethernet 프레..
IP주소 체계와 서브네팅 네트워크를 이해하려면 “어디로 데이터를 보내야 하는지”를 먼저 알아야 한다. 이번 글에서는 IP 주소 체계와 서브네팅(Subnetting)에 대해 정리해 본다. 참고로 IP주소는 IPv4(ex. 192.168.123.132)와 IPv6(ex. 2001:db8:abcd:0012:0000:0000:0000:0001) 두가지 형태가 있으나 아래에서는 보다 대중적으로 많이 사용되고 있는 IPv4를 기준으로 설명한다. IP 주소 구조 IP주소란 인터넷에 연결되어 있는 장치(컴퓨터, 스마트폰, 서버 장비 등)들을 식별할 수 있도록 각각의 장비에 부여되는 고유 주소이다. IP 주소는 32비트 binary 주소를 4바이트(8비트씩)로 구분하여 “dotted-decimal” 형태로 표기(ex. 192.168.1.10)..
람다 표현식 람다 표현식이란 람다 표현식(Lambda Expression)은 Java 8부터 도입된 함수형 프로그래밍 기능 중 하나로 이름이 없는(익명) 함수를 간결하게 표현하는 구문이다. Java 8 이전에는 단일 메소드를 구현하려 해도 반드시 해당 메소드를 포함하는 클래스를 정의해야 했지만, 람다 표현식을 사용하면 불필요한 boilerplate 코드가 크게 줄어들고 함수 자체를 값처럼 전달하거나 변수에 바로 할당할 수 있게 되었다.// 입력 받은 두 정수의 합산 결과를 리턴하는 메소드int add(int x, int y) { return x + y;}// 람다 표현식을 이용해 아래와 같이 단축 가능 (메소드 반환 타입, 메소드 이름 생략 가능)(int x, int y) -> { return x + y;};/..
함수형 인터페이스 함수형 인터페이스란 자바에서 함수형 인터페이스란 추상 메소드가 1개만 정의된 인터페이스를 의미한다. 이러한 함수형 인터페이스는 java 8 부터 등장했는데 람다 표현식을 이용해 함수형 프로그래밍을 구현하기 위해 등장했다. 하지만 함수의 형태는 매우 다양하다. 함수의 리턴 값이 있을 수도 없을 수도 있고 매개변수가 1개 혹은 2개일 수도 있다. 이러한 형태의 함수를 매번 새롭게 정의해서 사용하는 건 실질적으로 불가능한데 자바의 함수형 인터페이스 표준 API를 사용하면 이러한 문제를 해결할 수 있다. Java 함수형 인터페이스 표준 API 함수형 인터페이스 표준 API는 java.util.function 패키지로 제공된다. 이 패키지 안에 있는 대표적인 인터페이스 종류는 다음과 같다.함수형 인터페이스메소..
함수형 프로그래밍 프로그래밍 패러다임(Programming Paradigm) 프로그래밍 패러다임이란 코드를 어떻게 구조화 할지 정의하는 방식을 의미한다. 이러한 프로그래밍 패러다임은 그 종류가 매우 다양하나 큰 틀로 나눴을 때는 다음과 같이 두가지로 나뉜다. 1. 명령형(Imperative) 프로그래밍 : 어떻게(How) 처리할지 단계별로 기술하는 방식절차지향 프로그래밍 : 수행되어야 할 순차적인 처리 과정을 포함하는 방식(C, C++)객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현(C++, Java, C#)2. 선언형(Declarative) 프로그래밍 : 무엇을(What) 할지 선언하는 방식함수형 프로그래밍 : 자료 처리를 수학적 함수의 계산으로 취급하는 방식(클로저, 하스켈, 리스프) 함수형 프로그..
Java Collection Framework Java Collection Framework(JCF)는 Java에서 데이터를 저장하고 조회·조작하기 위해 제공되는 표준 인터페이스 및 구현체의 집합이다. 이번 글에서는 JCF의 전체 구조와 주요 인터페이스에 대해 알아보고자 한다. Collection Framework의 종류 Collection Framework는 크게 Collection 인터페이스와 Map 인터페이스로 나뉜다. List, Queue, Set 인터페이스는 공통적으로 Collection 인터페이스를 상속하고 있지만 Map 인터페이스는 두개의 데이터를 묶어 한쌍으로 다루기 때문에 Collection 인터페이스와 따로 분리되어 있다. Collection Framework 에 저장할 수 있는 것은 참조 타입(Reference Type)만 가..