라벨이 #JAVA인 게시물 표시

[JAVA] Iterator란?

[JAVA] Iterator란? Iterator란? 자바의 컬렌션 프로엠워크에서 컬렌션에 저장되어 있는 요소들을 읽어오는 방법을 표준화하였는데 그 중 하나가 Iterator이다 public interface Iterator{ boolean hasNext(); //true와 false를 반환 Object next(); // 다음 요소를 반환 void remove(); //next로 읽어온 요소를 삭제한다. next()를 호출한 다음에 remove를 호출해야 한다. } Iterator는 다시 말해 인터페이스이다. 그렇다면 저 메소드들은 어떻게 정의되어 있을까? List 혹은 Set인터페이스를 구현하는 컬렉션은 iterator()가 컬렉션의 특징에 맞게 설계가 되어 있다. Iterator 사용법 ArrayList list = new ArrayList (); for( Iterator itr = list.iterator(); itr.hasNext(); ) { list.get(itr.next()); } ArrayList list = new ArrayList (); Iterator itr = list.iterator(); while(it.hasNext()){ list.get(itr.next()); } Iterator를 활용해서 list의 모든 값을 가져온다. 출처 https://hipercube.tistory.com/entry/JAVA-Iterator-%ED%95%A8%EC%88%98

[용어 정리] 객체지향(OOP)란?

[용어 정리] 객체지향(OOP)란? 객체 지향 프로그램(Object-Oriented Programming)이란? 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임의 하나 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 한다 보다 직관적인 코드 분석을 가능하게 하는 장점도 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판도 있다. 프로그램은 특수한 목적을 가지고 데이터를 처리하기 위하여 만들어진다. 그런데 복잡한 데이터를 수많은 함수로만 처리하다 보면 여러가지 에러와 버그가 발생하는 문제점이 나타난다. 클래스는 이러한 문제를 해결하고 복잡한 데이터를 조금 더 쉽게 처리하게 도와준다. 주의점 일반적으로 프로그램을 만들때 항상 염두에 둬야 할 중요 포인트 2개 같은 코드를 반복하지 않는다. 코드는 항상 바뀔 수 있다는 것을 기억한다. 또한 클래스를 사용하면 사전이나 리스트가 지원하지 않는 상속과 같은 클래스의 기능도 사용 가능 출처 http://schoolofweb.net/blog/posts/

[용어 정리] jar, war 차이 정리

[용어 정리] jar, war 차이 정리 Java로 개발한 application을 배포할 때는 jar, war형태로 배포하게 된다. 이 둘은 완전히 동일한 형식임 즉, 확장자를 서로 바꿔도 문제는 없지만, 만들어진 목적이 서로 다름 war는 Web application을 배포하는 형식 jar는 library나 일반 application을 배포하는 형식 JAR(Java ARchive) jar압축은 하나의 application기능을 가능하도록 java파일 등을 압축하고 지원 만드는 목적 : 자바 클래스 파일들이 주이며, EJB 파일들을 포함 EJB(Enterprise Java Beans) : 기업 환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델 path등의 경로를 유지하기 때문에 jar파일을 사용하는 사용자들은 각 파일들에 대한 path문제에서 벗어날 수 있다. ex) ojdbc14.14, servlet-api, jar 등 WAR(Web Archive) war압축은 jar과 달리 웹 어플리케이션을 지원하기 위한 압축방식 웹 어플리케이션을 지원하기 위해서 war 압축방식은 jsp, servlet, gif, html, jar 등을 압축하여 지원 이는 jar과 같은 맥락으로 servlet context 접근을 위해 관련된 모든 파일들을 패키지화 만드는 목적 : 웹 어플리케이션에 관련된 파일들을 포함한다. ex) jsp, servlet 파일 등 출처 https://teamescape.tistory.com/51

[JAVA] ByteBuffer란?

[JAVA] ByteBuffer란? 초기화 // ByteBuffer 의 위치는 java.nio.ByteBuffer 입니다. int capacity = 1024; ByteBuffer buffer1 = ByteBuffer.allocate(capacity); ByteBuffer buffer2 = ByteBuffer.allocateDirect(capacity); allocate와 allocateDirect는 무슨 차이일까? allocate : 자바에서 주로 쓰이는 일반적인 할당 allocateDirect : 자바의 힙이 아닌 외부(운영체제 시스템)의 할당 때문에 운영체제 시스템을 이용하는 입출력(소켓통신의 read/write  등)에서 중간 개체를 거치지 않아 속도적 이득이 있는 반면에, 일반적인 가비지 컬렉터 밖의 범위에 있으며, 할당과 해제시 한 단계 더 거치기 때문에 이러한 동작의 속도는 감소 자바 문서에서는 운영체제 시스템을 이용하는 입출력이며 할당과 해제가 잘 일어나지 않는 부분에 allocateDirect를 사용하라고 권고하고 있다. 생성된 객체가 다이렉트인지 아닌지 알기 위해서는 isDirect를 사용하면 된다. if (buffer2.isDirect()) { // allocateDirect 로 생성된 객체입니다. } 주요 포인터/ 반환함수 int capacity() 전체 크기  처음 allocate / allocteDirect에 할당된 크기를 반환 이 값은 객체가 소멸될때까지 변하지 않음 int position() 포인터의 시작 포지션 첫 생성값은 0 int limit() 포인터의 끝, 첫 생성값은 capacity()와 동일 ByteBuffer buf = ByteBuffer.allocate(100); System.out.println("처음생성"); System.out.println(buf.capacity()); System.out.println(b...

[JAVA] split을 출력하고 싶을 때

[JAVA] split을 출력하고 싶을 때 String[] parsedFilePath = location.split("/") System.out.println(parsedFilePath); // 이상한게 나옴 Arrays.toString(parsedFilePath); //제대로 나옴

[JAVA] Stream 총정리

[JAVA] Stream 총정리 Streams 자바 8이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for 또는 foreach 문을 돌면서 요소 하나씩을 꺼내서 다루는 방법이었음 간단한 경우라면  상관없지만, 로직이 복잡해질수록 코드의 양이 복잡해져서 여러 로직이 섞이게 됨 Stream은 '데이터의 흐름' 임 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터랑 하고 가공된 결과를 얻을 수 있음 람다를 이용해서 코드의 양을 줄이고 간결하게 표현 가능 즉, 배열과 컬렉션을 함수형으로 처리 가능 또 하나의 장점은 간단하게 병렬처리가 가능 병렬처리 : 하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것 즉, 쓰레드를 이용해 많은 요소들을 빠르게 처리 Streams의 순서 생성하기 : 스트림 인스턴스 생성 가공하기 : 필터링(filtering) 및 맵핑(mapping)등 원하는 결과를 만들어가는 중간 작업 결과 만들기 : 최종적으로 결과를 만들어내는 작업 Streams 생성하기 보통 배열과 컬렉션을 이용해서 스트림을 만들지만 이 외에도 다양한 방법으로 스트림을 만들 수 있음 스트림을 이용하기 위해서는 먼저 생성을 해야 함.  배열 Stream 배열은 다음과 같이  Arrays.stream 메소드를 사용 String[] arr = new String[]{"a", "b", "c"}; Stream stream = Arrays.stream(arr); Stream streamOfArrayPart = Arrays.stream(arr, 1, 3); // 1~2 요소 [b, c] 컬렉션 Stream 컬렌션 타입(Collection, List, Set)의 경우 인터페이스에 추가된 디폴트 메소드 stream 을 이용해서 스트림을 만들 수 있음 Li...

[JAVA] BufferedReader, BufferedWriter

이미지
[JAVA] BufferedReader, BufferedWriter BufferedReader, BufferedWriter모두 Buffer에 있는 IO클래스 입력된 데이터가 바로 전달되지 않고 중간에 버퍼링이 된후에 전달됨 출력도 마찬가지로 버퍼를 거쳐서 간접적으로 출력장치에 전달되기에 시스템의 데이터처리 효율성을 높여줌 버퍼 스트림을 InputStreamReader/ OutputStreamWriter를 같이 사용하여 버퍼링을 하게 되면 입출력 스트림으로부터 미리 버퍼에 데이터를 갖다 놓기 때문에 보다 효율적인 입출력이 가능 BufferedReader Java를 처음 접하는 분들이 주로 받는 입력방식은 Scanner. Scanner를 통해 입력을 받을 경우 Space, Enter를 모두 경계로 인식하기에 입력받은 데이터를 가공하기에 매우 편리 BufferedReader는 Enter만 경계로 인식하고 받는 데이터가 String으로 고정되기 때문에 입력받은 데이터를 가공하는 작업이 필요한 경우가 많음 그러나, 많은 양의 데이터를 입력받을 경우 BufferedReader를 통해 입력받는 것이 효율면에서 훨씬 나음 입력시 Buffer 메모리줌으로써 작업속도 차이가 많이 난다 BufferedWriter Java를 처음 접하는 분들이 주로 출력하는 방식은 System.out.println("") 적은양의 출력일 경우 성능차이가 미미하지만 많은 양의 출력을 할때는 Buffer로 해주는것이 좋음 InputStreamReader 바이트 스트림을 문자 스트림으로 변환을 제공 문자로 변환하는 경우 인코딩 방식은 특정 방식으로 지정할 수도 있고 경우에 따라서는 플랫폼의 기본 인코딩을 사용 InputStreamReader는 한 문자씩 읽음 OutputStreamReader 문자 스트림을 바이트 스트림으로 변환을 제공 문자로 변환하는 경우 인코...

[JAVA] 제네릭(Generic)이란?

이미지
[JAVA] 제네릭(Generic)이란? Generic 클래스에서 사용할 타입을 클래스 외부에서 설정하는 것 제네릭 선언 하는 법 클래스<사용할 타입>으로 함 CustomerStack 클래스는 <T>로 제네릭이 설정되어 있다. CustomerStack 내부에 있는 List타입의 customStack 객체도 <T>로 제네릭 설정이 되어 있음 GenericEx_1 클래스에는 두 개의 객체 stringStack과 integerStack이 있음 두 객체의 타입은 CustomStack임 CustomsStack 클래스를 사용하려면 제네릭이 설정되어 있으므로, 사용하는 쪽에서도 제네릭 타입을 명시해줘야함 ex) <String>, <Integer> 등 마치, 회원가입 기능에서 '이름 입력'란에는 반드시 한글이나 영문만 들어가야 하는데, 사용자가 숫자를 넣게 되면 에러가 발생하는 것과 같음 <E>, <T>의 차이 E, T로 선언되어 있는 제너릭 클래스에 어떤 타입 클래스가 들어가도 성공한다. E(element)는 요소라고 해석 할 수 있다. ex) ArrayList는 요소들(object)를 배열처럼 저장하기 때문에 E로 선언되어야 함 즉, List는 E(Element)가 어울린다. 결론은, 컬렉션 클래스(Collection, List, Set)와 같이 배열 기반으로 되어 있는 구조에는 E가 어울리고 그 외에는 T가 어울림 제네릭은  참조형 데이터 타입 만 설정 가능 즉, int, char 이런것들은 설정 불가 Integer는 래퍼 클래스(wrapper class)임 래퍼 클래스는 기본형 데이터 타입(primitive type)을 참조형 데이터 타입으로 바꿔주는 클래스 출처 http://2dubbing.tistory.com/17 https://lng1982.tistory.com/...

[Spring] @RequestBody, @ResponseBody 정리

이미지
[Spring] @RequestBody, @ResponseBody 정리 웹 서비스와 REST방식이 시스템을 구성하는 주요 요소로 자리 잡으면서, 웹 시스템간에 XML이나 JSON등의 형식으로 데이터를 주고 받는 경우가 증가하고 있다. 이에 따라 스프링 MVC도 clinet에서 전송한 XML데이터나 JSON 또는 기타 데이터를 컨트롤러에서 DOM 객체나 자바 객체로 변환해서 받을 수 있는 기능을 제공한다. post나put method에서 주로 사용 @RequestBody Http요청 몸체를 자바 객체에 담을 수 있다 clinet에서 전송한 XML데이터나 JSON 또는 기타 데이터를 컨트롤러에서 DOM 객체나 자바 객체로 변환해서 받을 수 있는 기능을 제공한다. @ResponseBody 자바 객체를 HTTP 응답 몸체로 전송할 수 있다 자바 객체를 XML이나 JSON 또는 기타 형식으로 변환해서 전송할 수 있는 기능을 제공하고 있다. 출처 http://devbox.tistory.com/entry/Spring-RequestBody-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98%EA%B3%BC-ReponseBody-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98%EC%9D%98-%EC%82%AC%EC%9A%A9

[JAVA] Getter, Setter를 사용하는 이유

이미지
[JAVA] Getter, Setter를 사용하는 이유 자바와 같은 객체 지향 프로그램에서는 데이터 자체는 외부에서 접근을 할 수 없도록 하고, 메소드만 공개해서 이 중 유효한 값들을 데이터로 저장함 즉,  객체들이 데이터(필드)를 외부에서 직접적으로 접근하는 것을 막아놓음 필드들은 private 접근 제한자로 막아두고, 각 필드의 Getter , Setter 로 접근하는 방식을 취함 Getter, Setter는 클래스의 특성중 정보 은닉(Hiding information)을 잘보여줌 이렇게 프로그래밍을 하는 이유는 객체의 무결성 을 보장하기 위함 예를들어 Man이라는 클래스에 weight(몸무게)라는 필드가 존재할 때, weight는 0보다 작을 수없으나, 외부에서 직접적으로 접근할 경우, weight에 -100이라는 값을 줌으로써 객체의 무결성 이 깨지는 일이 발생 또한, 객체가 가지고 있는 로직을 무시하게 만들수도 있음 ex) 여기 이를 방지하기 위해서, 필드는 private로 만들어 외부의 접근을 제한한 후, Setter 를 사용해 전달받은 값을 내부에서 가공해 필드에 넣어주는 방식을 사용함 마찬가지로 필드 값을 가져올때도, Getter 를 사용해 본 필드의 값을 숨긴 채 내부에서 가공된 값을 사용할 수 있음 출처 http://thiago6.tistory.com/75

[JAVA] 자바 빈즈(Java Beans)란?

이미지
[JAVA] 자바 빈즈(Java Beans)란? Java Beans 자바로 작성된 소프트웨어 컴포넌트들을 지칭하는 단어 현재 실행되고 있는 JVM 프로세스 내에서 실행되고 있는 인스턴스이며 이 중 어떤 인스턴스들은 필요에 따라 내가 호출하여 사용할 수 있음 자바로 작성한 자바 클래스 중에 자바 빈즈 규약에 맞게 작성된 클래스를 JSP에서 사용 가능 이를 통해서 웹 디자이너 측 부분과 개발자(비즈니스 로직)을 처리하는 부분을 분리하여 개발 할 수 있음 이렇게 하면 웹 내용으로부터 웹 표현을 분리함으로써 동적인 웹 페이지 제작을 위한 개발과 관리에 있어 명확한 분리가 가능 자바 관련 소프트웨어 개발에 있어 재사용이 가능한 표준 컴포넌트 모델 동일한 기능이 페이지 구성이 달라서 반복적으로 사용되어지는 경우가 있을 경우에도 웹페이지를 효율적으로 작성, 수정하려면 반복적으로 사용되는 코드를 재사용 할 수 있어야 함.  자바 빈즈는 이와 같은 효율적인 코딩작업을 가능하게 함 현재 개발되었거나 되고 있는 프로그램들은 모두 MVC(Model-View-Controller)기법에 의해 개발 됨 Model : 로직을 가지고 있는며 DB와 연동하는 부분 (JavaBeans) View : 사용자에게 제공하는 화면으로 UI(User Interface)에 해당 (JSP page) Controller : 뷰와 모델사이에서 흐름을 제어, DAO역할, 비즈니스 로직 Java Beans를 사용하는 목적 JSP페이지의 로직 부분을 분리해서 코드를 재사용함으로 프로그램의 효율을 높임 프로그램의 모듈화(component)는 코드를 재사용하므로 프로그램의 작성기간이 단축되고, 이미 실 시스템에 사용했던 코드를 사용하므로 코드의 안정성이 보장되며 유지 보수가 쉽다. MVC패턴에서 Java Beans의 역할 프로그램 로직을 가지고 있으며 DB와 연동을 해서 작업을 처리함 출처 h...

[JAVA] this란?

이미지
[JAVA] this란? 자바에서 this는 "객체, 자기 자신" 을 나타냄 주로 3가지 형태로 사용되고 있음 1. 클래스의 속성과 생성자/메소드의 매개변수(input paramerter)의 이름이 같은 경우 클래스의 속성을 사용할 때 this 키워드를 붙여준다 2. 클래스에 오버로딩 된 다른 생성자 호출 생성자의 최상단(가장 먼저)에 사용되어야 함 위의 예에서는 2개의 매개변수를 입력받는 생성자(name, color)의 구현부분에서 4개의 매새변수를 입력받는 생성자(name, color, weight, count)를 호출하고 있음 3. 객체 자신의 참조값을 전달하고 싶을 때 어떤 메소드에서는 동작을 완료하고 리턴값으로 어떤 메소드에서는 내부에서 호출하고자 하는 메소드의 매개변수(input parameter)로 객체, 자기 자신의 참조값을 전달하고 싶은 경우가 있음 이럴때에는 getFruitInstance()메소드처럼 this 키워드를 이용함으로써 구현이 가능 출처 http://library1008.tistory.com/4

[Spring] ResponseStatus어노테이션

[Spring] ResponseStatus어노테이션 import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.http.HttpStatus; 위의 것들을 import하고 @ResponseStatus (code = HttpStatus . NOT_FOUND , reason = "Directory Not Found" ) public class DirectoryNotFoundException extends RuntimeException { } 위와 같이 만들고 나서 throw new DirectoryNotFoundException (); 이렇게 처리하면 됨

[Spring] Crossorign어노테이션 정리

이미지
[Spring] Crossorign어노테이션 정리 CORS(Cross-origin resource sharing) 웹 페이지의 제한된 자원을 외부 도메인에서 접근을 허용해주는 메커니즘 서로 다른 도메인에서 리소스를 공유하는 방식 기존의 있던 Same-origin policy(동일 출처 정책)와 반대되는 개념으로 보면 됨 처음 전송되는 리소스의 도메인과 다른 도메인으로부터 리소스가 요청될 경우 해당 리소스는 cross-origin HTTP 요청 된다.  ex) http:domain-a.com으로부터 전송되는 HTML페이지가  <img>src속성을 통해 http:domain-b.com을 요청하는 경우가 있음 오늘날에는 많은 웹 페이지들이 CSS 스타일, 이미지, 그리고 스크립트와 같은 리소스들을 각각의 출처로부터 읽어옴  ex) www.example.com이라는 사이트에서 사용하는 api가 있다. 해당 api는 외부에 공개하려는 목적이 아닌, 자신들의 사이트에서 사용하기 위해 만들어졌다고 치자. 그런데 이 api를 다른 사이트에서 알게 되었고, 허락없이 무단으로 가져다 사용하게 된다면 이 사이트 입장에서는 상당히 곤란할 것이다. 그래서 나온 것이 Same-origin policy 정책이다. 즉, 프로토콜, 도메인, 포트가 모두 같을시 동일 출처 정책 을 따른다고 볼 수 있다. 예를 들어, http:www.heowc.com이라는 URL이 있다면 다음과 같은 상황이 발생한다 보통 api를 사용할 때, ajax를 사용하는데 이 same-origin policy를 따르지 않을 경우, 오류가 나면서 api 사용이 거절된다. 하지만, 이 정책이 마냥 좋은 것은 아니다. ' 만약 한 사이트에서 여러 도메인을 가지고 있을 경우 문제가 생긴다 단지 도메인만 다를뿐 똑같은 서비스라고 하더라도 동일 출처 정책을 따르지 않기 때문이다 해결할 수 있는 방법은 JSONP (Json wit...

[Spring] RequestMapping이란?

이미지
[Spring] RequestMapping이란? RequestMapping 컨트롤러 구현 = 클라이언트의 요청을 처리할 메서드를 구현 client는 URL로 요청을 전송 요청 RUL을 어떤 메서드가 처리할지 여부를 결정하는 것이 @RequestMapping ex) 어떤 경로를 한 메서드에 처리하고 싶다면, 배열로 경로 목록을 지정하면 됨 @PathVariable 을 이용한 경로 변수  경로를 한개 이상 사용도 가능 게시글의 내용을 보여주는 URL을 보면 http://host/readArticles?id=10와 같이 요청 파라미터를 이용하는 경우가 많음 but) URL자체를 이용해서 게시글 링크를 표현하는 경우도 많음 @RequestMapping 어노테이션은 경로에 {변수}형식의 경로 변수를 사용할 수 있음 @PathVariable을 사용하면 경로 변수 값을 파라미터로 전달받을 수 있음 Spring은 경로 변수의 값을 파라미터 타입에 맞게 변환해줌 경로 변수를 파라미터 타입으로 변환할 수 없을 경우, 스프링 MVC는 웹 브라우저에서 400에러 코드를 응답 결과로 전송함 Ant 패턴을 이용한 경로 매핑 * : 또는 그 이상의 글자(matches zero or more characters) ex) @RequestMapping("/member/*.info") /member/로 시작하고, 확장자가 .info로 끝나는 모든 경로 ? : 1개 글자(matches one character) ex) @RequestMapping("/faq/f?00.fq") /faq/f로 시작하고, 1글자가 사이에 위치하고 00.fq로 끝나는 모든 경로 ** : 0개 또는 그 이상의 디렉토리 경로(matches zero or more directories in path) ex) @RequestMapping(...

[Spring] Restcontroller란?

[Spring] Restcontroller란? REST(Representational State Transfer)  하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념 특정한 URI는 반드시 그에 상응하는 데이터 자체라는 것을 의미하는 방식 ex) /wedul/123은 해당 페이지의 번호의 123번이라는 고유한 의미를 가지고 설계하고 이에 대한 처리는 GET, POST방식과 같이 추가적인 정보를 통해서 결정 REST API : 외부에서 위와 같은 방식으로 특정 URI를 통해서 사용자가 원하는 정보를 제공하는 방식 REST방식의 서비스 제공이 가능한 것을 Restful하다고 표현 spring 3부터 @ResponseBody 어노테이션을 지원하면서 REST방식의 처리를 지원함 spring 4에 들어와서 @RestController가 본격적으로 사용 됨 @RestController spring 4부터 @RestController 어노테이션의 경우 기존의 특정한 JSP와 같은 뷰를 만들어 내는 것이 아닌 REST방식의 데이터 자체를 서비스 하는 것 URI가 원하는 리소스를 의미함 URI에는 식별할 수 있는 데이터를 같이 전달하는 것이 일반적 import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/sample") Public Class RestControllerExampleController{ } 만약 오류가 나면 maven의 webmvc버전을 확인할것 출처 http://blog.naver.com/PostView.nhn?blogId=rokking1&logNo=220896108118&parentCategoryNo=...

[Dababase] JDBC란?

[Dababase] JDBC란? JDBC(Java DataBase Connectivity) 자바 프로그램 내에서 DB와 관련된 작업을 처리할 수 있도록 도와주는 일을 함 java에서 DB를 사용할 때에는 JDBC API를 이용하여 프로그래밍 함 자바는 DBMS종류에 상관없이 하나의 JDBC를 사용하여 DB작업을 처리할 수 있기 때문에 알아두면 어떤 DBMS든 작업을 처리 할 수 있게 됨 JDBC API가 생긴 이유 JDBC API가 없었던 옛날에는 각각의 데이터베이스마다(ms-sql, my-sql, oracle ..)각각의 SQL문을 사용함 그래서 DB의 종류에 따라 SQL문의 작성 방법이 너무나 차이가 나서 개발자들의 항의가 많았음 그러다가 더이상 무한 경쟁을 하지 말고 메서드나 일부 용어를 통일하여 회사간 협의가 이루어짐 그 결과로 fuction이나 structure, 전역변수 등을 통합하는 문법으로 통일시켰고, 그 통일시킨것이 바로 JDBC API 즉, JCBC API를 사용할 경우 DBMS에 알맞는 JDBC드라이버만 있다면 어떤 DB라도 사용 가능 현재 Oracle, MySQL, MS-SQL등 주요 DBMS가 자신에 알맞는 JDBC드라이버를 제공하기 때문에 문제없이 DB를 사용 가능 JDBC 세팅하기 설치한 DB폴더에 가서 oracle-connector-java.Jar파일을 찾는다. JDBC Driver는 클래스 형태로 존재하여 일반적으로 Jar파일로 제공된다 이 Jar파일을 웹 어플리케이션 디렉토리에 WEB-INF\lib에다가 파일을 복사해주면 셋팅이 완료 자바에서 JDBC코딩하는 대략적인 순서 JDBC드라이버를 로딩시킨다 DirverManager,getConnection을 통해 DB connection을 구현함 Query실행을 하기 위해서 Statement 객체를 생성함 Query를 실행함 Query실행 결과 사용 Statement 종료 데이터베이스 커넥션 종료 ...

[JAVA] NIO란?

이미지
[JAVA] NIO란? NIO(Non-blocking I/O, New I/O) 강력한 I/O 오퍼레이션 기능을 제공하는 자바 프로그래밍 API NIO의 키워드는 3가지 : 버퍼, 채널, 셀렉터 Input Output이란? I/O는 소스로부터 데이터를 읽어서 목적지에 데이터를 읽는 것 데이터는 입력 소스로부터 읽고 출력 목적지로 쓰여진다. ex) 키보드가 표준 입력으로 동작하면, 데이터를 읽어 프로그램에 쓰여지는 것 ex) 표준출력으로 텍스트를 출력하기 위해 System.out.println()를 사용하는것 JDK에 java.io 및 java.nio 패키지에는 I/O를 처리하는 자바클래스들이 포함되어 있다 java.io패키지는  I/O를 수행하기 위한 굉장히 많은 클래스들을 가지고 있다 java.io패키지는 class explosion이다. class explosion : 클래스가 증가하는 수가 관리할  수 없는 지경에 이르는 것 Input/Output Streams Stream의 사전적 의미 : 무엇인가의 끊기지 않는 흐름 Java I/O에서 stream의 의미는 데이터의 순차적인 흐름 스트림의 데이터는 byte, 문자, 객체일 수 있음 강은 물의 스트림 물은 소스로부터 목적지까지 끊기지 않고 흐름 Java I/O도 데이터의 흐름 Data soure로부터 Data sink인 목적지까지 흐른다 즉, 자바 프로그램은 input 스트림으로 데이터를 읽고 output 스트림으로 데이터를 씀 NIO란? 스트림 기반 I/O에서는 데이터 소스와 데이터 싱크, 자바 프로그램간의 데이터 이동을 위해서 스트림을 사용 자바 프로그램은 스트림으로부터 데이터를 읽거나 쓴다 이러한 접근은 I/O 수행을 느리게 만든다.  NIO는 스트림 기반 I/O의 느린 속도를 해결한다. I/O처리를 위해 채널과 버퍼를 사용한다 채널=stream이라고 ...

[JAVA] Garbage Collection(가비지 컬렉션)이란?

이미지
[JAVA] Garbage Collection(가비지 컬렉션)이란? JVM 의  Runtime Data Area의 Heap부분의 가비지 컬렉션이 궁금해졌다 먼저 Heap(힙)부분을 정리해보자 인스턴스는 소멸 방법과 소멸 시점이 지역 변수와는 다르기에 힙이라는 별도의 영역에 할당된다. 자바 가상 머신은 매우 합리적으로 인스턴스를 소멸시킨다. 더 이상 인스턴스의 존재 유무가 없을 때 소멸시킨다. New/ Young 영역 Eden : 객체들이 최초로 생성되는 공간 Survivor 0/1 : Eden에서 참조되는 객체들이 저장되는 공간 Old 영역 New area에서 일정 시간 참조되고 있는, 살아남은 객체들이 저장되는 공간 Eden영역에 객체가 가득차게 되면 첫번째 GC(minor GC)가 발생함 Eden영역에 있는 값들은 Survivor 1 영역에 복사되고 이 영역을 제외한 나머지 영역의 객체들은 삭제됨 Permanent Generation 생성된 객체들의 정보의 주소값이 저장된 공간 Class loader에 의해 load되는 Class, Method 등에 대한 Meta 정보가 저장되는 영역 JVM에 의해서 실행됨 --------------------------------------------------------------------------------------------------------------------------------------------------------------- Minor GC 새로 생성된 객체(instance)는 Eden 영역에 위치함 Eden영역에서 GC가 한 번 발생한 후 살아남은 객체는 Survivor 영역 중 하나로 이동 이 과정을 반복하다가 계속 살아남아 있는 객체는 일정 시간 참조되고 있다는 뜻으로 Old영역으로 이동함 Major GC Old영역에 있는 모든 객체들을 검사하여 참조되지 않은 객체...

[JAVA] Servlet(서블릿)과 JSP의 차이

이미지
[JAVA] Servlet(서블릿)과 JSP의 차이 Servlet과 JSP는 같다 더 정확하게 말하면,  JSP라는 서버사이드 자체 스크립트 언어라는것이 존재하지 않는다 사실은 JSP가 서블릿이다 Servlet이란? 서버사이드에 Java라는 서버가 있고, 그 속에서 움직이는 프로그램을 개발하는 구조로 되어 있다 Java서버에서는 그 안에서 프로그램을 작동시키기 위한 구조가 준비되어 있다. 그리고 그 구조에 따라 프로그램을 만들고 포함해 두었다. 사용자가 그 프로그램에 할당된 URL에 접근하면, Java서버는 그 프로그램을 실행하도록 되어 있다. 이 " Java서버에서 움직이는 작은 프로그램 "이 서블릿이다 JSP란? 서블릿은 결국 Java프로그램이기 때문에, 만드는 것도 좀 힘들다. 모두 Java로 코딩해야 한다 단지 내부의 처리뿐만 아니라 클라이언트에 표시되는 HTML 코드도 모두 Java코드를 사용해야 한다 HTML을 모두 println으로 만드는 상상을 해보자.. 끔찍 그래서 더 편한 서버 사이드 Java를 사용할 수 있도록 하는것이 JSP이다 Java서버는 JSP코드를 읽어 들여, 그것을 서블릿 소스 코드로 변환한다. HTML 태그등도, 모든  println으로 쓰여지도록 변환하는 것이다. 그렇게 생성된 서블릿 소스 코드를 컴파일하고, 서블릿을 생성하여 그것을 호출한다. 즉, JSP가 서블릿이 되는것이다 Servlet과 JSP의 차이 같다고는 하지만, 접하는 사용자에게 상당한 차이가 있다. JSP는 HTML안에 처리를 포함하기 때문에, HTML 페이지에 뭔가를 추가하는 경우에는 매우 편리 Frontend에 적합 반대로 서블릿은 HTML으로 자세하게 출력하지 않아도 되는곳에 활용하면 편하다 Backend에 적합 출처 https://araikuma.tistory.com/275