백엔드/JAVA_이론공부 35

JAVA_자료구조_해시 맵 (hash map)

오늘 코딩테스트를 보는데, 사실 문제의 난이도는 높지 않았는데 해시맵 관련 문제를 못풀어서 블로그에 해시맵 관련 포스트를 작성하기로 했다. 해시맵의 간단한 문법과 관련된함수 두세개만 알면 10분이면 금방 푸는 문제였는데 ㅠㅠ 여튼 그래서 나중에 또 나오면 풀 수 있게끔 기록을 하고자 한다... Hash Map 일단 해시맵이란 뭔가? 해시맵은 맵(Map)인터페이스를 구현한 컬렉션이다. 뭔소리냐고? 맵(Map)은 기본적인 틀이고, 해시맵은 그 틀에 이것저것 넣어서 잘 작동하게 한거라고 보면 된다. 일단 맵의 기본적인 틀은 Key값 과 Value로 이루어져 있다. 뭔가 key, value 해서 복잡한거 같지만 단순하다. 우리가 종종 물건에 견출지로 내 이름을 적어놓거나, 번호를 적어놓기도 한다. 그런데, "물..

JAVA_시간복잡도_(Time Complexity)

시간복잡도(Time Complexity) 시간복잡도의 예시, 아주 대표적이고 중요한 사진이다. 머릿속에 기억하자 종종 코딩문제를 풀때, for문으로 풀때는 덜한데, while문으로 풀 때 "출력 나오는데 생각보다 오래걸리네" 하는 경험이 있을 것이다. 컴퓨터는 기본적으로 연산하는 놈인데, 연산 횟수가 많으면 자연히 오래걸린다. 우리는 이럴때 자연스럽게 "이거 생각보다 오래걸리는데, 더 빨리하게 못하나?" 하는 생각을 할 때가 많다. 시간 복잡도는 이러한 생각을 수치적으로 나타내는 지표 라고 볼 수 있다. Big-O 표기법 일단, 위의 그림을 보면 우리가 학창시절에 배웟던 익숙한 그래프가 보인다. 일단 시간 복잡도는 "입력값의 변화에 따라 연산을 실행 했을 때, 연산횟수에 비해 시간이 얼마나 걸리는가"를 ..

JAVA_자료구조_(Binary Search Tree, 트리 순회)

1. Binary Search Tree 트리구조는 편리한 구조를 전시하는것 이외에 효율적인 탐색을 위해 사용되기도 한다. 대표적으로 이진 트리가 있다. 이진 트리는 자식 노드가 최대 2개씩만 존재하는 노드로 구성된 트리이다. 이진 트리의 자료 삽입, 삭제 , 노드 배치에 따라 정 이진 트리, 완전 이진 트리, 포화 이진 트리로 분류된다. 3가지 이진 트리의 예시 (출처 : 코드스테이츠) 이진 트리 종류, 및 특징 (출처 : 코드스테이츠) 위의 이진 트리를 이용한 이진 탐색 트리 또한 자주 사용된다. 이진 탐색 트리는 모든 왼쪽 자식의 값이 부모보다 작고, 모든 오른쪽 자식의 값이 루트, 혹은 부모의 값보다 큰값을 가진다. 이 특징으로 특정 수들을 배치하는것으로 데이터를 분류하거나 정렬 및 탐색 알고지름을..

JAVA_자료구조_(Graph)

Graph 그래프, 그래프는 여러개의 점들이 복잡하게 연결되어 있는 관계를 표현한 자료구조이다. 우리가 아는 그래프는 X축, Y축 나눠서 선 그리고 함수 그리고 하는거였는데, 컴퓨터에서 그래프는 다른의미를 갖는다. 마치 거미줄처럼 복잡한 네트워크 망과 같다. 자료구조 그래프 예시(출처 : 코드스테이츠) Graph의 구조 단순한 그래프의 예시 (출처 : 코드스테이츠) 점(데이터)를 정점 이라고 한다. 데이더와 데이터가 직접적인 관계가 있는 경우 두 점 사이를 이어주는 선이 있다. 간접적인 관계라면 한번에 연결 안되고 몇 개의 점, 선에 걸쳐 이어진다 (옆자리 사람이 친구의 친구 같은 느낌이다. 몇 다리 건너건너서 아는사람 같은거) Graph의 표현방식 인접 행렬 간단한 그래프 형태(출처 : 코드스테이츠) ..

JAVA_자료구조_트리(Tree)

Tree Tree(트리)는 말 그대로 나무와 비슷한 형태를 가진 자료구조이다. 그런데 우리가 아는 나무가 아니고, 거꾸로 서있는 나무 모양이다. (약간, 토너먼트 대진표랑 비슷한 형태라고 생각하면 된다.) 토너먼트의 대진표, 적절한 예신른 아님, 작동방식이 다름 트리는 단방향 그래프의 한 구조로, 하나의 뿌리(root)에서 가지가 뻗어나온 형태로, 나무와 닮아 붙여진 이름이다. Tree 자료구조의 예시 (출처 : 코드스테이츠) 위의 그림을 보면 A~J까지 데이터가 여러개 들어있는 자료구조임을 알 수 있다. 그런데, 우리가 사용하는 배열 등은 쥬루룩 정령되서 들어가는데, 트리는 좀 다르다. 데이터를 순차적으로 나열한 선형구조가 아니라, 하나의 데이터 아래에 여러개의 데이터가 존재할 수 있는 비선형 구조이기..

JAVA_자료구조_큐(Queue)

자료구조 자료구조란 쉽게 말해서 일종의 주머니다. 우리가 intm String등등의 자료를 사용 했는데 이들 모두 자료구조의 일종이다. 한개의 값을 가질때는 단순구조인 int, char 형 변수 등이 사용되고, 여러개의 값을 가질 때에는 배열로 짤짤이로 다 저장 가능하다. 우리가 담으려는 데이터에 따라 그에 맞게 담기는 부분이 더 적합한게 있다는 소리다. 쉽게 비유하면, 자료 = 데이터 = 물건 자료구조는 물건을 담는데 적합한 형태를 띄는 주머니의 형태라고 보면된다. 하나하나 담고 싶을때는 칸칸이 나뉘어진 통에, 짤짤이로 담는 파츠 케이스 뭉탱이로 담고싶으면 포대를 쓰는 것 처럼 밀가루를 짤짤이로 담지 않는다, 포대를 쓴다 담고자 하는 물건 (데이터)에 따라 적합한 주머니(자료구조)가 따로있다! 라는것만..

JAVA_자료구조_스텍(Stack)

자료구조 자료구조란 쉽게 말해서 일종의 주머니다. 우리가 intm String등등의 자료를 사용 했는데 이들 모두 자료구조의 일종이다. 한개의 값을 가질때는 단순구조인 int, char 형 변수 등이 사용되고, 여러개의 값을 가질 때에는 배열로 짤짤이로 다 저장 가능하다. 우리가 담으려는 데이터에 따라 그에 맞게 담기는 부분이 더 적합한게 있다는 소리다. 쉽게 비유하면, 자료 = 데이터 = 물건 자료구조는 물건을 담는데 적합한 형태를 띄는 주머니의 형태라고 보면된다. 하나하나 담고 싶을때는 칸칸이 나뉘어진 통에, 짤짤이로 담는 파츠 케이스 뭉탱이로 담고싶으면 포대를 쓰는 것 처럼 밀가루를 짤짤이로 담지 않는다, 포대를 쓴다 담고자 하는 물건 (데이터)에 따라 적합한 주머니(자료구조)가 따로있다! 라는것만..

JAVA_재귀함수

재귀함수 재귀함수, 이름만 보면 재귀? -> 반복? -> 돌아온다고? 재귀함수는 자기자신을 호출하는 함수다. 잉? 뭔 말이냐고? 먼제, 쉬운 비유를 의해 뱀 한마리를 등장시키겟다. 비얌이에여유 뱀은 어떤식으로 생겼는가? 원래 제멋대로 생기긴 했지만 일단 머리에서 뻗어나온 몸통, 그리고 꼬리로 이루어져 있다. 머리 방향으로 돌아댕기는 뱀 뱀은 움직일 때 머리 방향으로 꿈틀꿈틀 겨댕기는데, 머리 - 몸통 - 꼬리 순으로 꿀렁꿀렁 기어간다. 이때, 뱀을 메서드로 대입하면 머리 : 메서드 헤드부분 몸통 : 메서드 바디부분 꼬리 : 메서드 끝부분(?) 으로 볼 수 있다. 뱀이 기어간다. = 메서드가 실행된다. 라고 생각하자 그런데 만약 뱀이 신나게 기어가다가 유턴해서 자신의 꼬리쪽으로 달려가면 오? 위와같이 꼬리..

JAVA_가상머신, STACK과 HEAP, 가비지컬렉션

자바 가상 머신 자바(java)의 대표적인 특징은 운영체제에 종속적이지 않다는 것이다. 이게 무슨말이냐? 하면 다른 언어 (C, C++)등은 운영체제에 종속적인데, 쉽게 말하면 윈도우에서 C,C++로 만든 애는 윈도우에서만 동작하고, MAC은 MAC에서만, 리눅스는 리눅스에서만 되는 것이다. -> 운영체제가 달라지면 작동을 안한다. 운영체제에 맞게 새로 컴파일 해야 함 그런데 자바는 운영체제 상관없이 잘 작동 한다. 이유는 자바 가상머신(JVM) 덕분이다. 자바가 동작할 때 운영체제 위에서가 아닌, 가상머신 위에서 동작하기 때문에 운영체제와 상관 없는 것이다. 여러가지 운영체제에서 작동가능한 자바, 가상머신 덕분이다.(출처 코드스테이츠) 자바 가상머신(JVM)은 자바 프로그램을 실행시키는 프로그램이다. ..

JAVA_스레드

스레드 우리가 PC 사용할 때, 카톡도 하고, 유튜브로 노래들으면서 코딩할 수 있는게 이 쓰레드 덕분이다. 스레드는 데이터와 어플리케이션이 확보한 자원을 활용하여 소스코드를 실행하는 것이다. 프로그램이 동작하는 것은 프로세스라고 하는데, 이 프로세스들을 한번에 여러개 돌리려면 여러개의 스레드가 필요하다. 윈도우의 작업관리자 화면, 프로세스가 여러개 동작 중인 것을 알 수 있다. 물론, 하나의 프로세스에 여러개의 스레드가 사용 될 수 있다. 하나의 프로세스에 한개의 스레드가 사용되면 싱글 스레드 프로세스 , 여러개가 필요하면 멀티스레드 프로세스 라고 한다. 쉽게 말하면 실행중인 애플리캐이션(앱) 은 프로세스, 프로세스 내에서 실행되는 소스코드의 실행 흐름은 스레드라고 한다. 메인 스레드 우리가 자바 어플리..