전체 글

윤유후의 기술 블로그
Java

Java 변수의 기본타입(Primitive Type)과 참조타입(Reference Type)

1. 변수(Variable)와 리터럴(Literal) 프로그래밍에서 데이터를 다루는 것은 가장 중요한 것 중 하나입니다. 어떠한 작업을 수행하기 위해 관련된 데이터를 입력받아 처리하고 결과를 출력하는 과정이 필요합니다. 리터럴(Literal)은 "문자로 표현된 데이터"를 의미합니다.(94, 100과 같은 숫자가 바로 리터럴입니다.) 이러한 리터럴은 데이터가 가진 의미를 전달하기엔 불완전하기에 우리는 변수라는 또 다른 무언가를 사용하여 데이터를 관리하고 있습니다. 1.1 변수(Variable) 변수는 영어로 Variable입니다. Variable의 어원을 살펴보면 "변하기 쉬운, 변할 수 있는"이라는 뜻을 가지고 있습니다. 프로그래밍에서도 변수란 변할 수 있는 데이터를 저장하는 공간입니다. 정확히 말하면 ..

Java

Java 코드의 메모리 구조 완벽정리

지난 시간에는 Java의 실행과정에 대해 자세하게 알아봤다면 이번 포스팅에서는 JVM의 구성요소인 Runtime Data Area가 어떻게 구성되어 있고, JVM은 이를 어떻게 관리하는지 자세하게 알아보겠습니다. Java는 메모리 관리에 자유로운 언어이지만, 개발자 자신이 다루는 변수, 객체들이 어떻게 저장되고 참조되는지에 대해 정확하게 이해하고 있어야 합니다. 불필요한 메모리 사용을 줄이고 최적화와 성능 향상을 위해서 메모리 구조에 대한 지식은 개발자에게 필수입니다. 1. Runtime Data Area(런타임 데이터 영역) Java 바이트 코드를 실행하는 JVM은 메모리 관리를 위해 Runtime Data Area를 사용합니다. JVM은 Runtime Data Area를 여러 영역으로 나누어 각 데이..

Web

인터넷 주소창에 URL을 치면 어떤 일이 일어날까?

1. 웹 페이지란? 지금의 인터넷은 단순히 취미를 즐기기 위한 것이 아니라 거의 모든 정보에 접근할 수 있는 도구이자, 전 세계 사람들과 소통할 수 있는 커뮤니케이션의 공간입니다. 개발자를 목표로 하고 있는 저는 당연히 인터넷과 웹이 어떻게 동작하는지에 대해 배워야 하지만, 이번 포스팅에서는 독자분들도 이해할 수 있도록 어떤 과정을 통해 사용자에게 웹 페이지를 보여주는지 자세하게 알아보겠습니다. 2. 웹 서버 & 웹 클라이언트 지금 보는 웹 페이지는 어떻게 사용자에게 전달되는 걸까? 이걸 알기 위해서는 먼저 웹서버(Server), 웹 클라이언트(Client) 구조에 대해 알고 있어야 합니다. 2.1 웹서버(Web Server) 서버(Server)는 어원 그대로 서비스 제공자란 뜻입니다. 웹 서버는 인터넷..

Java

Java의 실행과정과 JVM에 대해 파헤쳐보자

1. Java의 실행과정 Java는 대표적인 객체지향 언어로 주로 대규모 서버 애플리케이션 개발이나 모바일 애플리케이션 개발에 사용되는 언어입니다. 따라서 Java 개발자라면 컴퓨터 내부에서 Java가 어떤 과정으로 실행되는지 깊게 이해하고 있어야 성능 최적화나 디버깅에 효율적으로 대처할 수 있을 것입니다. 이번 기회에 Java의 실행과정과 JVM이 무슨 일을 하는지 알아봅시다. 위 그림은 .java 확장자를 가진 파일이 해석되는 전체적인 과정을 나타낸 것입니다. 우린 평소에 아래와 같은 Java 파일을 생산했을 것입니다. 1.1 Java Compiler(javac) 우리와 같은 사람이 작성한 java파일은 첫 번째로 Java Compiler에 의해 바이트코드로 변환됩니다. 바이트 코드의 확장자는 .cl..

Algorithm

[C++] 백준(BOJ) 2240 - 자두나무

- 문제 https://www.acmicpc.net/problem/2240 2240번: 자두나무 자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어 www.acmicpc.net - 문제 풀이 T(시간) : 1 ~ 1,000 w(이동 가능 횟수) : 1 ~ 30 어떠한 특정 상황에서 자두를 줍기 위해 행동할 수 있는 경우를 모두 생각해보자. 현재 위치에 자두가 떨어지는 경우 자리를 바꿔 자두를 줍지 않는다. 자리를 바꾸지 않고 자두를 줍는다. 현재 위치가 아닌 곳에 자두가 떨어지는 경우 자리를 바꿔 자두를 줍는다. 자리를 바꾸지 않고 자두를 줍는다. 총 4가지의 경우의 수..

Algorithm

[C++] 백준(BOJ) 2493 - 탑

- 문제 https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net - 문제 풀이 N(탑의 개수) : 1 ~ 500,000 탑의 높이 : 1 ~ 100,000,000 탑의 개수가 최대 50만이기 때문에 O(n2)으로 풀면 TLE가 발생한다. O(nlogn) 이하의 시간 복잡도로 풀어야 한다. 그럼 어떤 알고리즘을 써야 할까? 위 그림처럼 각각의 탑은 왼쪽 방향으로 레이저를 발사한다. 따라서 송신탑보다 더 높은 탑들 중 가장 가까운 탑이 수신한다. 이를 ..

윤유후
윤유후의 블로그