목록Java (26)
고코딩
JNDI란? 회사에서 개발환경을 세팅하다가 JNDI를 설정할 일이 있었다. 처음에는 JNDI가 뭐지? 생각하고 있다가 이것 저것 알아보니 매우 중요한 기술인것을 알고 내 나름대로 정리해본다. JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup) 하기 위한 자바 API다. JNDI는 일반적으로 다음의 용도로 쓰인다: 자바 애플리케이션을 외부 디렉터리 서비스에 연결 (예: 주소 데이터베이스 또는 LDAP 서버) 자바 애플릿이 호스팅 웹 컨테이너가 제공하는 구성 정보를 참고 출처 : 위키백과 간단히 요약하자면 우리가 연결하고 싶은 데이터베이스의 DB Pool을 미리 Naming 시켜주는 방법 중..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/zkPZg/btq1V3nezKQ/3zqmKs0i37XbVQeRf6Umek/img.png)
JVM Java Virtual Machine의 약어 자바 프로그램을 컴파일 해서 나온 결과인 바이트코드를 실행시켜주는 가상 머신이다. 어플리케이션을 실행시켜주는 가상머신을 사용함으로써, 윈도우와 리눅스/맥 등 다양한 환경에서 언제나 동일하게 실행되도록 할 수 있다는 장점을 가지고 있다. 각 운영체제별 JVM은 자바측에서 개발하여 배포하므로, 프로그래머는 운영체제에 관계없이 프로그램을 개발할 수 있어, 한번 컴파일 됐으면 운영체제에 따라 다시 컴파일할 필요가 없는 WORA(Write Once Run Anywhere)을 만족한다. JRE 자바 실행환경을 의미한다. JVM을 동작하는데 필요한 각종 자바 라이브러리를 담고 있다. JDK Java Development Kit의 약자로, 자바 개발 키트를 의미한다...
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cOuyzO/btqX0qnGJ8e/zkdZXxTLwxigWfnD3mAswk/img.png)
Spring을 공부하던 중 파일 업로드를 하는 코드를 작성하던 중 UUID를 사용하는 코드를 보게 되었다. 근데 UUID가 무엇일까? UUID 범용 고유 식별자(汎用固有識別子, 영어: universally unique identifier, UUID)는 소프트웨어 구축에 쓰이는 식별자 표준으로, 개방 소프트웨어 재단(OSF)이 분산 컴퓨팅 환경(DCE)의 일부로 표준화하였다. 라고 위키피디아 에서 정의하고 있다. 간단하게 정의하자면 각 개체를 고유하게 식별 가능한 값을 말한다. 어느 시스템에서 각 유저마다 ID를 위한 고유 식별자(Key)를 만드는데 처음에야 다르겠지만, 시스템이 커지고 사용자가 많아짐에 따라서 중복이 일어날 수 있게 된다. UUID를 사용하게 되면 위의 이미지 규칙에 따라서 식별자를 만들..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/d8TfKk/btqVIags3hW/LSm0xScxS0KkpfSBB1zx91/img.png)
##문제 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 벽을 부수고 이동하는 것이 좀 더 경로가 짧아진다면, 벽을 K개 까지 부수고 이동하여도 된다. 한 칸에서 이동할 수 있는 칸은 상하좌우로 인접한 칸이다. 맵이 주어졌을 때, 최단 경로를 구해 내는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다...
자바의 최상위 클래스는 Object클래스이다. Object클래스에는 기본적으로 equals(), hashCode(), toString(), clone(), notify()등 여러 메소드가 존재한다. 그 중에서도 우리가 가장 많이 사용하는 equals()에 대해서 알아보자. ==연산자 처음 코딩을 배울때 '같다, 동등하다' 의 의미로 쓰는 것이 ==라고 배웠다 그래서 if(10 == 10)으로 작성해 if문을 실행하였다. 그때는 그저 같으면 됬지 라는 생각으로 사용하고 있었다. 그런데 어느 순간 String을 배우고 나니 equals()가 뿅 하고 나타났다. 그러고는 String은 객체여서 equals()로 비교해야 한다. 원래 그렇다 라고 밖에 설명을 듣지 못했다. 나는 그저 '아 ..
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.LinkedList; public class Main { public static void main(String[] args) throws IOException{ HashTable ht = new HashTable(3); ht.put("sung", "She is pretty"); ht.put("jin", "She is model"); ht.put("hee", "She is angel"); ht...
문제 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 스택에 들어있는 정수의 개수를 출력한다. empty: 스택이 비어있으면 1, 아니면 0을 출력한다. top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. 입력 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보..
JAVA를 어느정도 공부하다보면 예외처리 오류를 해줘야 한다는 구문을 많이 만날 수 있었다. 입력할때마다 예외가 발생해 항상 try~catch구문으로 예외처리를 해주었는데 사실 정확한 의미와 구성 방식을 몰랐다. 심지어 throws와 throw는 누구도 알려준적이 없어서 처음으로 자바프레임워크를 사용했을 때 처음 보는 수식어 때문에 많이 당황했었다. 이 포스팅으로 예외처리에 대한 간단한 이해를 해보자. try~catch와 throws의 차이 try~catch의 의미를 검색해보면 발생한 예외를 처리한다. 라고 되어있고, throws는 예외처리가 발생한 메소드를 호출한 메소드에게 예외를 처리한다, 라고 되어있다. 처음 이 글을 읽었을때는 이게 무슨소리인가 싶었다. 하지만 잘 곱씹어 읽어보면 처리하는 순간이 ..
지인이 코딩테스트 문제를 풀던중 계속해서 메모리 초과가 발생하는 문제가 있었다. 문자열들을 입력받아 정렬하는 문제였는데 아무리 봐도 메모리초과가 발생할만한 곳이 없었다. 문자열도 String이 아닌 StringBuffer로 받아서 사용하고 있었기에 의심을 하지 못했다. 문제는 + 연산에서 발생했다. 생각해보니 StringBuffer에서는 append를 사용하도록 기능을 주고 있었다. 그럼 append와 + 연산은 무슨 차이일까? String, StringBuffer,StringBuilder의 특징 String과 StringBuffer, StringBuilder의 가장 큰 차이점은 String은 Imutable이라는 점이다. Imutable은 불변하지 않는 이라는 뜻을 가지고 있는데 String은 문자열 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/mzvPd/btqRGpOYUdG/w9mXPrxMctUj36UFxKtpu1/img.png)
앞서 포스팅한 스택과 큐는 자료구조에서 선형 구조라고 한다. 선형 구조는 데이터가 순차적으로 나열되어진 형태를 말하는데, 트리는 비선형구조로 이루어져있다. 비선형구조는 데이터가 계층적(혹은 망)으로 구성되어있다. 선형구조와 비선형구조의 차이점은 구성형태뿐만 아니라 용도에서도 차이점이 들어나느데, 선형구조는 자료를 저장하고 꺼내는 것에 초점이 맞춰져 있고, 비선형구조는 표현에 초점이 맞춰져 있다. 보통 컴퓨터의 폴더 구조가 대표적인 트리의 형태를 가지고 있다. 트리(Tree)의 개념 계층적인 자료를 표현하는데 적합한 자료구조 이다. 노드(node)와 간선(edge)"브랜치(Branch)라고도 불린다" 로 구성되어 있다. 제일 최상위에 위치한 노드를 루트노드(Root Node)라 부르고 나머지 노드들을 서브..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cPffuk/btqRxZQDdZN/miYr65640TgaOvLVjJ9xp0/img.png)
Queue Queue는 자료구조의 스택과 반대의 구조라고 생각하면 된다. 큐는 FIFO(First In First Out)의 형태를 가지게 됩니다. 가장 먼저 들어온 데이터가 가장 먼저 나가는 구조를 말한다. Enqueue : 큐 맨 뒤에 데이터를 추가 Dequeue : 큐 맨 앞쪽의 데이터를 삭제 특징 큐의 한쪽 끝은 Front로 정하여 삭제연산만 수행한다. 다른 한쪽 끝은 Rear로 정하여 삽입연삼나 수행한다. 그래프 넓이 우선 탐색(BFS)에서 사용된다. 컴퓨터 버퍼에서 주로 사용, 마구 입력이 되었으나 처리를 하지 못할 때, 버퍼(큐)를 만들어 대기 시킨다. 먼저 들어온 입력먼저 처리 Java로 큐를 구현 먼저 자바에서 제공해주는 Queue클래스를 이용해 Queue를 구현해보자. 자바에서는 스택을..