자바

    [JSP] 서블릿(Servlet)과 JSP 정리, MVC 패턴

    [JSP] 서블릿(Servlet)과 JSP 정리, MVC 패턴

    서블릿은 자바 기반의 웹 프로그래밍 기술로 자바 언어의 모든 기능을 사용할 수 있다. (확장자도 .java) 스레드 기반의 빠른 처리 속도를 자랑하지만, 프로그램 내에서 HTML을 작성하는 것이 화면 인터페이스 구현에 너무 많은 코드를 필요로 하는 등 유지 보수 측면에서 많은 문제가 있다고 한다. 이러한 문제점을 개선한 것이 JSP(Java Server Page)다. JSP는 서블릿 기반의 서버 스크립트 언어로 현재 가장 대표적인 웹 프로그래밍 기술이다. 서블릿의 장점을 수용하면서 단점을 보완했다. JSP의 장점은 스레드 기반으로 시스템 자원을 절약하고 효율적인 공류가 가능하며 최초 요청시 서블릿으로 컴파일 되어 이후 요청에 대해서는 메모리에서 처리하므로 빠른 처리속도를 자랑한다. 또한 자바 언어의 모든..

    [Java] 자바 네트워크 채팅 프로그램 구현 ( 소켓, 유니 캐스팅 )

    [Java] 자바 네트워크 채팅 프로그램 구현 ( 소켓, 유니 캐스팅 )

    유니 캐스팅이란 서버와 클라이언트가 일대일로 통신하는 개념이다. 자바 소켓을 이용해서 유니 캐스팅 채팅 프로그램을 구현해 보았다. 구조 소스코드 📝 UnicastServer import java.io.*; import java.net.*; public class UnicastServer { private ServerSocket serverS; private UnicastServerThread ust; public UnicastServer(int port) { //포트번호 try { serverS = new ServerSocket(port); } catch(IOException ioe) { ioe.printStackTrace(); System.exit(0); } while(true) { try { Syst..

    [Java] 자바 GUI AWT 사용법 ( 간단한 채팅 프로그램 구현 )

    [Java] 자바 GUI AWT 사용법 ( 간단한 채팅 프로그램 구현 )

    AWT(Abstract Window Toolkit)는 GUI 프로그램을 제작하기 위해 자바에서 제공하는 라이브러리를 모아놓은 것이다. 운영체제가 제공하는 UI를 사용하기 때문에 플랫폼에 의존적이고 구성요소가 무겁다는 특징 때문에 요즘은 거의 사용하지 않는다고 한다. 하지만 비교적 쉽고, Java Swing이 AWT 기반이기 때문에 간단하게 한번 살펴보는 것도 좋을 듯하다. AWT 계층 및 구성요소 1. Container 프로그램창의 역할을 한다. 이 컨테이너 위에 컴포넌트들이 올라간다. 2. Component 화면을 담당하는 구성요소들이다. ( 버튼, 텍스트 필드 등 ) 3. Event 윈도우 프로그래밍에서 어떤 특정한 행동이 발생 한 그 자체를 의미한다. (ex 버튼 클릭 등) 이벤트 소스 : 이벤트가..

    [Java] 자바 두 개의 큐(Queue)로 스택(Stack) 구현하기

    [Java] 자바 두 개의 큐(Queue)로 스택(Stack) 구현하기

    https://hyunki99.tistory.com/26 이전 글과 비슷하게 2개의 큐로도 스택을 구현할 수 있다. 큐는 많이 사용되는 자료구조 중 하나이다. 먼저 들어온 것이 먼저 나오는 구조로서 FIFO (First In First Out)의 형태를 띈다. 2개의 큐를 활용해서 스택을구현하는 방법을 알아보자. 1. 원리 1. 메인 큐와 임시 큐를 준비한다. 2. 메인 큐에 1개의 원소가 남을 때까지 dequeue하고, 임시 큐에 넣는다. 3. 마지막 남은 1개의 원소는 result 변수에 저장한다. 4. 임시 큐에 남아있는 원소들을 다시 메인 큐로 이동시킨다. 5. result를 리턴한다. 2. 예제코드 import java.util.LinkedList; import java.util.Queue; c..

    [Java] 자바 두 개의 스택(Stack)으로 큐(Queue) 구현하기

    [Java] 자바 두 개의 스택(Stack)으로 큐(Queue) 구현하기

    스택은 많이 사용되는 자료구조 중 하나이다. 나중에 들어온 것이 먼저 나오는 구조로서 LIFO (Last In First Out)의 형태를 띈다. 2개의 스택을 활용해서 큐를 구현하는 방법을 알아보자. 1. 원리 스택을 하나 사용하면 LIFO지만, 2개의 스택을 사용해서 FIFO(First in First Out) 형태인 큐 자료구조를 구현할 수 있다. 스택과 큐에서 자료가 어떤 방식으로 들어오고(push) 나가는지(pop)만 이해하면 어렵지 않다. 스택 : 1, 2, 3을 push하고 pop하면 3, 2, 1 순으로 나오게 된다. 큐 : 1, 2, 3을 enqueue하고 dequeue하면 1, 2, 3 순으로 나오게 된다. 즉, 스택과 큐는 서로 역순(reverse)이다. 나오는 자료를 역순 뒤집어 주..

    [Java] 너비우선탐색 (BFS) 미로찾기 Queue구현

    [Java] 너비우선탐색 (BFS) 미로찾기 Queue구현

    너비우선탐색(BFS) 최대한 넓게 이동한 후 더 이상 갈 수 없을 경우 아래로 이동한다. 인접한 노드를 먼저 탐색하고, 가장 멀리 떨어져 있는 정점을 가장 나중에 방문한다. 최단 경로를 찾고자 할 경우 주로 사용한다. 1. map : 갈 수 있는 길은 0, 갈 수 없는 길은 1이다. 2. enqueue한 길도 벽으로 변경하여 여러번 enqueue할 수 없도록 한다. (방문 처리) 3. class Index : Queue에 담을 객체 ( x와 y의 좌표를 가지고 있다.) 4. 현재 인덱스를 저장하고 있는 Index 클래스를 매개변수로 받아 findWay() 메서드에서 상하좌우를 탐색하고 enqueue한다. 5. enqueue한 Index를 dequeue해 위치를 이동한다. 0) { if (map[x-1][..

    [Java] 깊이우선탐색 (DFS) 미로찾기 스택구현

    [Java] 깊이우선탐색 (DFS) 미로찾기 스택구현

    깊이우선탐색(DFS) 최대한 깊이 내려간 후 더이상 깊이 갈 곳이 없을 경우 옆으로 이동한다. 미로찾기의 경우 최대한 한방향으로 쭉 직진한다. 더 이상 길이 없으면 스택을 pop하며 길을 찾아간다. 모든 노드를 방문하고자 할 경우 주로 사용하며 검색 속도는 너비우선탐색(BFS)보다 느리다. 따라서 최단 경로를 찾고 싶다면 BFS를 사용해야 한다. 1. map : 갈 수 있는 길은 0, 갈 수 없는 길은 1이다. 2. push한 길도 벽으로 변경하여 여러번 push할 수 없도록 한다. (방문 처리) 3. class Index : Stack에 담을 객체 ( x와 y의 좌표를 가지고 있다.) 4. 현재 인덱스를 저장하고 있는 Index 클래스를 매개변수로 받아 findWay() 메서드에서 상하좌우를 탐색하고 ..

    [Java] 이진검색 재귀함수로 구현하기

    import java.util.Scanner; public class BinarySearchRecursion { // 2진검색 (재귀) static int binarySearch(int[] arr, int start, int end, int key) { // (배열, 시작 인덱스, 끝 인덱스, 찾을 값) if (start key) { return binarySearch(arr, start, mid -1, key); //중앙값이 찾으려는 값보다 크면 끝 인덱스를 중앙값-1로 설정 } else if (arr[mid] < key){ return binarySearch(arr, mid + 1, end, key); //중앙값이 찾으려는 값보다 작으면 시작 인덱스를 중앙값+1로 설정 } } return -1; //..