전체 글135 [Network] 동기와 비동기 개요 데이터를 처리하는 방식에는 동기와 비동기 방식이 있습니다. 각각의 특성을 알아보고 어떤 차이점이 있는지 알아보겠습니다. 동기(synchronous) 먼저 동기는 데이터의 요청과 결과 반환이 동시에 일어나는 방식입니다. 여기서 의문점이 생겼는데, 요청에 따른 결과를 반환하기 위해 처리 시간이 필요할텐데 어떻게 요청과 응답이 동시에 일어난다는 것인지 잘 와닿지 않았습니다. 이를 가능하게 만드는 방식은 요청을 보낸 뒤 응답이 올 때까지 기다리는 것이었습니다. 응답을 기다리는 동안 클라이언트는 다른 작업을 하지 못한 채 응답만을 기다리는 상태로 대기하게 됩니다. 비유하자면 상사의 결정을 기다리는 다소 수동적인 부하직원이라고 볼 수 있겠습니다. 정리 - 장점 : 설계가 간단하다. - 단점: 요청에 대한 응답.. 2023. 8. 22. [백준] 1238. 파티 / Java https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net ✔ 문제 풀이 조건 분석 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 각각의 학생들은 파티 장소 X에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 학생들은 최단 시간에 오고 가기를 원한다. 왕복시간이 가장 긴 학생의 소요시간을 구하라. 풀이 학생들은 최단시간에 이동을 원하므로 최단 거리 알고리즘 다익스트라를 생각하였다. 이때, 이동방.. 2023. 8. 17. [OS] 가상 메모리 메모리란? 프로그램과 프로그램 실행에 필요한 데이터 및 코드를 저장하는 장치 메모리의 종류 주기억 장치: RAM, register, cache memory 보조기억 장치: SSD, HDD 가상 메모리의 필요성 기존에는 프로그램이 실행되기 위해 프로그램 전체가 메모리에 로드되어야 했기 때문에, 메모리(RAM)의 용량은 가장 큰 애플리케이션의 용량보다 커야했다. 하지만 메모리의 접근은 순차적이고 지역화되어 있는 경향이 있기 때문에 전체를 로드하여 사용하는 것은 비효율적이었다. 가상 메모리는 이러한 물리적 메모리 용량의 한계를 극복하기 위해 개발된 기술이다. 프로세스를 실행할 때 필요한 최소한의 부분만 메모리에 로드하고 나머지는 보조기억장치(디스크)에 두는 것이다. 결과적으로 보다 적은 메모리 용량으로 프로그.. 2023. 8. 16. [Algorithm] BackTracking / Java BackTracking = DFS + prunning ✔ 백트래킹이란? 백트래킹은 한마디로 가지치기(prunning)를 가미한 너비우선탐색(DFS)입니다. 다시 말해서, DFS로 해를 찾아가는 과정에서 수시로 현재 경로의 유망성을 판단하여 유망하지 않음이 판단되면 더이상 나아가지 않고 이전 노드로 돌아가 다른 경로를 탐색하는 방식입니다. 이어서 백트래킹과 완전탐색을 비교함으로써 백트래킹의 특성을 알아보겠습니다. ✔ 백트래킹과 완전탐색(DFS)의 차이 완전탐색과 구분되는 백트래킹의 핵심적인 특성은 '가지치기'에 있습니다. 완전탐색이 모든 경로를 탐색하는 데 반해 백트래킹은 불필요한 경로를 조기에 차단함으로써 탐색 소요를 줄입니다. 따라서 백트래킹의 효율성은 가지치기의 조건에 달려있다고 볼 수 있습니다. 다.. 2023. 8. 16. [Math] 부분집합과 멱집합 / Java 부분집합(Subset)과 멱집합(Power Set) 집합 A와 B가 있을 때, B의 특정 원소 x가 반드시 A의 원소이면 B를 A의 부분집합이라고 합니다. 그리고 이러한 부분집합(Subset)의 모든 경우의 수로 구성된 집합을 멱집합이라고 합니다. 부분집합을 Power Set으로 부르는 경우가 있는데 엄밀히 따지면 부분집합과 멱집합은 구분되는 개념입니다. 구현 구현 방식은 다음 두 가지가 있습니다. 재귀와 방문배열을 활용한 방식 비트마스킹을 활용한 방식 Java Code public class PowerSet { static int[] arr = {1, 2, 3}; static int n = arr.length; // 주어진 수의 갯수 static boolean[] visited = new boolean.. 2023. 8. 14. [Math] 순열(Permutation) / Java 순열(順列) 순서를 고려해 나열한 경우의 수. 즉, 서로 다른 n개 중 r개를 골라 순서를 정해 나열하는 경우의 수(nPr)를 의미합니다. 예를 들어, 다섯 명의 학생 중 반장 1명과 부반장 1명을 뽑는 경우의 수를 구하는 것이 순열에 해당한다고 볼 수 있습니다. 공식은 다음과 같습니다. 구현 주어진 수의 배열이 1, 2, 3일 때 두 개를 뽑는 순열의 경우의 수를 출력하는 코드입니다. 구현 방식은 두 가지입니다. 재귀와 방문배열을 활용한 방식 비트마스킹을 활용한 방식 // 순열(nPr) - n개의 값 중 r개를 순서대로 뽑는 경우의 수 public class Permutation { static int[] arr = {1, 2, 3}; static int n = arr.length; // 주어진 수의 .. 2023. 8. 13. [OS] 멀티 스레드의 장단점 멀티 스레드란? 하나의 응용 프로그램을 여러 개의 스레드로 구성하고, 각 스레드가 하나의 작업을 처리하도록 하는 구조 멀티 스레드의 장점 멀티 프로세스보다 적은 메모리 공간을 차지하고 context switch가 빠르다. context switch: 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업 context switch에 걸리는 시간이 클수록 멀티스레딩의 효율은 떨어진다. 프로세스 내에서 자원을 공유하여 자원 중복을 최소화 전역변수 공간이나 Heap 영역을 통해 데이터를 주고 받을 수 있다. Stack 영역을 제외한 모든 영역이 메모리를 공유한다. 멀티 스레드의 단점 스레드 간 자원을 공유하기 때문에, 하나의 스레드만 종료되어도 전체 스레드가 영향을 받을 수 있다. 동.. 2023. 8. 8. [Network] HTTP와 HTTPS HTTP (HyperText Transfer Protocol) HTTP는 서버와 클라이언트 간에 데이터를 주고 받는 프로토콜이다. *프로토콜 : 컴퓨터 간 데이터 교환 방식을 정의하는 규칙 체계이다 텍스트, 이미지, 영상 등 다양한 형태의 데이터를 전송할 수 있다. 다만, 전송 과정에서 따로 데이터를 암호화하지 않기에 데이터가 탈취되었을 시 보안 상 문제가 발생할 수 있다. 이러한 문제를 해결하기 위해 등장한 것이 HTTPS 이다. HTTPS (HyperText Transfer Protocol Secure) 기존 HTTP는 전송계층의 TCP 위에서 동작하는데, 여기서 SSL(Secure Sockets Layer)이라는 보안계층이 전송계층 위에 올라가 동작하게 된다. 그래서 이를 SSL 암호화 통신 이라고.. 2023. 8. 8. [OS] 프로세스와 스레드 프로세스(Process)란? 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스 각 프로세스는 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받는다. 서로 다른 프로세스는 각각 개별적으로 실행되므로 서로의 데이터에 직접적으로 접근할 수 없다. 다른 프로세스의 자원에 접근하려면 IPC(InterProcess Communication)을 활용해야 한다. 프로세스는 1개 이상의 스레드를 가지고 있다. 프로세스 구조 Code: 프로그램 코드가 CPU가 해석 가능한 기계어 형태로 저장되어 있다. Data: 전역 변수, 클래스 변수, 상수 등이 저장되어 있다. Stack: 함수 호출 시 할당되는 공간으로 함수 종료 시 소멸된다. 함수 내의 내역 변수 또한 저장된다. Heap: 동적으로 할당되.. 2023. 8. 3. [Java] 추상 클래스와 인터페이스 비교 1. 추상 클래스(abstract class) 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라, 단지 미완성 메서드(추상 메서드)를 포함하고 있다는 의미 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것 추상 클래스는 추상 메서드를 포함하고 있다는 것을 제외하고는 일반클래스와 유사하다 추상 클래스에도 생성자가 있으며 멤버변수와 메서드도 가질 수 있다 new 연산자 사용 불가 1. 1. 추상 클래스의 사용 방법 클래스 선언부에 abstract 키워드 입력 abstract 키워드를 포함한 추상 메서드를 정의한다. 추상 클래스는 상속을 통해서 자손 클래스에 의해서 완성 2. 인터페이스(interface) 추상클래스가 미완성 설계도 .. 2023. 8. 2. [Java] 생성자 라는 이름이 불러온 오해 생성자란 생성자는 '인스턴스(객체) 초기화 메서드'이다. 그래서 클래스 내의 메서드의 구조와 유사하다. 다만, 아래의 차이가 있다. 생성자는 반환값이 없다. 그러면서도 메서드 선언부에 void를 사용하지 않는다. 주로 인스턴스 변수 초기화 작업에 사용된다. 생성자에 대한 오해 생성자는 보통 '인스턴스를 생성할 때 사용하는 것'이라고도 이르러지기에 '생성자로 인스턴스를 생성할 수 있구나'라고 생각해왔다. 하지만 이는 완벽히 맞는 말은 아니었다!! (두둥탁🥁) 서두에서 생성자는 반환값을 가지지 않는다고 했다. Person person = new Person(); 위와 같이 인스턴스를 생성하곤 하는데 반환값이 있어야 변수에 그것을 할당할 것이 아닌가?? 이게 어찌된 일..? 알고보니 생성자 앞에 달려있는 세 .. 2023. 7. 19. [오늘의 발견 / Java] String의 생성 방식에 따른 비교 결과 차이 String 생성 방식의 종류 String 타입의 생성 방식에는 두 가지가 있다. literal을 이용한 방식 new 연산자를 이용한 방식 String str1 = "YOUTH"; // literal을 이용한 방식 String str2 = "YOUTH"; // literal을 이용한 방식 String str3 = new String("YOUTH"); // new 연산자를 이용한 방식 System.out.println(str1 == str2); // true System.out.println(str1 == str3); // false String 타입은 참조형 변수로서 == 비교를 하면 주소값 비교(Call by Reference)를 한다. 주소값에 들어있는 값을 비교하기 위해서는 equals() 메서드를.. 2023. 7. 17. 이전 1 2 3 4 5 6 ··· 12 다음