분류 전체보기(593)
-
[Java][Optional] Optional의 위험 및 사용 가이드
1. Optional 클래스가 위험한 이유 NullPointerException 대신 NoSuchElementException이 발생 할 수 있음 이전에는 없었던 문제가 발생할 수 있음 코드의 가독성 저하 시간적, 공간적 비용 증가 1.1 NullPointerException 대신 NoSuchElementException이 발생할 수 있음 @Test(expected = NoSuchElementException.class) public void testNoSuchElementException(){ //given Optional optional = Optional.ofNullable(null); //when String actual = optional.get(); //then fail("NoSuchEleme..
2022.11.28 -
[Java][Optional] Optional 클래스를 통한 Null 처리
1. Optional 클래스의 개념 1.1 NPE(NullPointerException)란 무엇인가? NPE란 null을 가리키고 있는 객체가 객체의 멤버를 참조하려고 할때 발생하는 예외입니다. 다음 예시는 null값을 가지는 문자열 객체가 메서드를 호출하려고 하는 예시입니다. public boolean isHello(String text){ return text.equals("hello"); } text는 null이기 때문에 NullPointerException 예외가 발생합니다. 위와 같은 경우를 막기 위해서 조건문을 통해서 null인지 검사를 하고 호출할 수 있습니다. public boolean isHello(String text){ if(text != null){ return text.equals..
2022.11.28 -
[알고리즘][동적계획법] 격자상의 경로
격자상의 경로 문제 n x n 격자가 있을 때 왼쪽 위 지점에서 오른쪽 아래 지점으로 가는 경로를 구하는 문제입니다. 이때 조건은 움직이는 방향은 오른쪽과 아래만 가능합니다. 결과는 경로가 지나가는 지점의 값을 모두 더한 값이 가장 커야 합니다. 격자상의 경로 예시 예를 들어 5 x 5 격자에서 최적 경로는 다음과 같습니다. 결과는 67입니다. 이 값이 왼쪽 위에서 오른쪽 아래로 가는 경로 중 가능한 최대의 값입니다. 격자상의 경로 접근 격자의 행과 열의 번호가 0~n-1이고 value[y][x]가 (y,x) 지점의 값이라고 가정 왼쪽 위 지점에서 (y,x) 지점까지의 경로의 최대값을 sum(y,x)로 나타내기로 함 점화식 sum(y,x) = max(sum(y, x-1), sum(y-1, x)) + va..
2022.11.24 -
[알고리즘][동적계획법] 최장 증가 부분 수열
1. 최장 증가 부분 수열 문제 정의 원소가 n개인 배열의 일부 원소를 골라내어 만든 부분 수열 중에서, 각 원소가 이전 원소보다 크다는 조건을 만족하면서 그 길이가 최대인 것을 최장 증가 부분 수열(longest increasing subsequence)이라 합니다. 문제 예시 다음과 같은 정수형 배열이 있다고 가정합니다. [6, 2, 5, 1, 7, 4, 8, 3] length(k)를 위치 k에서 끝나는 최장 증가 부분 수열의 길이라고 가정합니다. 그러면 0 5 -> 7) length(5) = 2 (1 -> 4) length(6) = 4 (2 -> 5 -> 7 -> 8) length(7) = 2 (1 -> 3) 위 결과에서 최장 증가 부분 수열을 가진 결과는 6번째로써 [2, 5, 7, 8]임을 알 ..
2022.11.23 -
[Docker] 컨테이너 기술과 도커
1. 가상머신과 컨테이너 가상화(Virtualization)란 무엇인가? 하드웨어 기능을 시뮬레이션하여 애플리케이션 서버, 스토리지, 네트워크와 같은 유용한 IT 서비스를 생성하는 소프트웨어 아키텍처 기술입니다. 가상머신 vs 컨테이너 비교 가상머신 : 호스트 운영체제 위에 가상화 소프트웨어(Hypervisor)를 이용하여 여러 개의 게스트 OS를 구동하는 방식 하이퍼바이저(Hypervisor) : 가상머신을 생성하고 실행하는 역할과 가상화된 하드웨어와 각각의 가상머신을 모티너링하는 중간 관리자, 대표적인 가상화 프로그램이 VMware, VirtualBox 등이 있습니다. 각각의 게스트 OS는 호스트 운영체제로부터 독립된 자원을 할당받아 가상화된 서비스를 제공하기 때문에 이미지 용량이 큼 컨테이너 : 컨..
2022.11.23 -
[Docker] 클라우드 컴퓨팅 개요
클라우드(Cloud)란 무엇인가? 인프라에 사용되는 서버, 저장소, 데이터베이스, 네트워크, 소프트웨어, 데이터 분석 등을 포함해 사용자가 언제든지 인터넷과 모바일을 통해 IT 서비스를 제공받을 수 있도록 하는 컴퓨팅 기술 1. 클라우드 컴퓨팅이란? 인터넷 기술을 이용해서 다수의 사용자에게 하나의 서비스로서 방대한 IT 능력을 제공하는 컴퓨팅 방식 클라우드 컴퓨팅 = 그리드 컴퓨팅 + 유틸리티 컴퓨팅 컴퓨팅 기술 비교 그리드 컴퓨팅 : 가상 네트워크를 이용하여 분산된 컴퓨팅 자원을 공유하는 기술 방식 (인터넷 유휴자원 활용) 유틸리티 컴퓨팅 : 컴퓨팅 자원에 대한 사용량에 따라 요금을 부과하는 종량제 방식 (on-demand 컴퓨팅 방식) 클라우드 컴퓨팅 : 기술적으로는 그리드 컴퓨팅을 따르고, 비용적으..
2022.11.23