[JAVA] JAVA 네이티브 언어와 통신하기 위한 JNI 개념
·
Java
😀 이 개념을 왜 정리하게 되었는지?최근 진행한 업무 중 특정 파일을 암호화 처리후 저장하는 기능 개발 작업을 하게 되었습니다.이때, 외부에서 인증 받은 다른 기업의 라이브러리를 사용해 암호화를 해야했고 그 기관에서 제공하는 모듈을 활용하여 암호화 하는 작업이었습니다.이때 그 기관에서 제공 받은 암호화 모듈을 C++ 로 개발된 모듈이었으며,현재 회사에서 운영중인 서비스는 Java 로 개발이 되어있기 때문에 상호작용을 위해서는 JNI 로 개발된 모듈을 제공해주었습니다.따라서 이때 JNI 개념을 한번 정리하는 시간이 필요하다 생각했습니다. 🙂 JNI 는 무엇일까JVM의 관점에서 "Java™" 및 "native" 의 두 가지 유형의 코드가 있습니다. JNI (Java Native Interface) 는 둘..
[Java] synchronized 는 무엇이며 어떤 방식으로 작동할까?
·
Java
자바에서 우리는 synchronized 라는 키워드를 쉽게 만날 수 있다. 이러한 키워드를 왜 사용하며 어떤 방식으로 사용하면 좋을 지에 대한 것을 정리해보겠다. 이 내용의 일부 자바 성능 튜닝이라는 책을 참고하여 작성하였다. 이번에는 사용법에 대한 내용을 정리하겠지만, 나중에는 성능에 대한 것도 정리 예정이다. synchronized 란? 동시에 어떤 작업에 접근을 하게 되었을 때 접근을 제어하는 역할을 하는 키워드 이다. 예를 들어 진행을 해보겠다. 하나의 기부를 받는 단체 클래스가 있다고 해보자. 이러한 단체에 동시에 여러 명의 사람(기부를 하는 사람) 이 기부를 하게 되었을 때 어떤 결과가 나오게 될까? 기부 단체 클래스 //기분 단체 클래스 public class Contribution { pr..
JSP 전체 동작 과정의 이해
·
Java/JSP
- JSP 란 Java Server Page 를 나타내는 Java 진형의 웹관련 기술이다. 이러한 특정 기술을 공부하는 이유 중에 하나는 이러한 흐름 플로우가 대부분의 웹 서버를 개발하는 다른 언어와 많이 유사하기 때문이다. 그래서 JSP 가 무엇일까? JSP는 HTML 페이지 내에 Java Code 를 직접 넣어 동적으로 페이지를 보여줄 수 있는 작업을 진행할 수 있는 기술이다. 이러한 JSP 는 서블릿으로 변환되고 서버에서 실행 될수 있는 Java 바이트 코드로 변환이 된다. - JSP 전체적인 동작 흐름 1. 클라이언트의 요청이 WAS(Web Application Server) 로 들어오게 된다. 2. 해당 JSP 와 관련된 서블릿 클래스가 존재하는 경우 2-1. JSP 페이지는 해당 자바 코드를 ..
Java - array, arrayList 에서 크기 가변의 내부 동작
·
Java
참고 블로그 : https://beaniejoy.tistory.com/50 [Collection] ArrayList 특징 (add할 때의 내부동작) Overview ArrayList의 add 과정 DEFAULT_CAPACITY를 넘겼을 때 ArrayList는 copy의 문제를 가지고 있다. ArrayList는 어떻게 사용해야될까 정리 📌 Overview ArrayList하면 코딩테스트나 실제 개발에 가장 많이 쓰이는 C beaniejoy.tistory.com 단순히 배열 array, 리스트 List 에 대하여 학습을 하게 되면서 무슨 차이가 있길래? 우리는 이걸 공부해야할까를 생각하게 되었다. 그리고 추가적으로 arraylist에 add 를 하게 되었을때 어떤 방식으로 동작을 하게 될지에 대하여 궁금하게..
Java - LinkedList (feat. vs ArrayList)
·
Java
자바의 정석에 나온 내용 배열은 가장 기본적인 형태의 자료구조로 간단하며, 사용하기 쉽고 데이터를 읽어 오는데 걸리는 시간이 가장 빠르다는 장점을 가지고 있다. 하지만, 다음과 같은 단점도 가지고 있다. 1. 크기를 변경할 수 없다. - 크기를 변경할 수 없으므로 새로운 배열을 생성해서 데이터를 복사해야한다. - 실행속도를 향상시키기 위해서는 충분히 큰 크기의 배열을 생성해야 하므로 메모리 낭비가된다. 2. 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다. - 차례대로 데이터를 추가하고 마지막에서부터 데이터를 삭제하는 것은 빠르지만, - 배열의 중간에 데이터를 추가하려면, 빈자리를 만들기 위해 다른 데이터를 복사해서 이동해야 한다. 이러한 배열의 단점을 보완하기 위해서 링크드 리스트라는 자료 구..
interface기반 구현(프로그래밍) 이란?
·
Java
개인적인 생각이 많고 그걸 정리한 것이니, 만약 정확한 정보를 얻고 싶은 분은 다른 분들의 게시글을 참고하면 될거 같다. 우리는 왜 java 에서 인터페이스를 학습하고 배울까? 단순히? 추상화를 사용하려고? 그럼 왜? 추상화를 사용할까? 이런 의문이 생기게 되었고 다시 학습을 시작하게 되었다. interface 는 사전적 의미를 보게 되었을 때 interface : 컴퓨터 프로그래밍에서 특정 기능 또는 서비스의 접점을 나타내는 의미이다. 특히 이 interface 는 경계를 많이 나타내는 의미를 띈다. 우리 UI (user interface) 를 많이 접하게 된다. 유저 인터페이스 우리가 사용하는 프로그램, 어플 등 유저와 서버를 이어주는 역할을 하는 점에 있어서 접점, 경계를 나타내는 것이다. 이런 것..
String, StringBuilder, StringBuffer
·
Java
String, StringBuilder, StringBuffer 우리는 왜 이걸 공부해야할까? 바로 성능과 관련 있기 때문이다. 그래서 공부하는거다 성능과 관련이 없다면 공부할 필요가 없다. 아무생각 없이 String을 사용하게 된다면 많은 메모리를 낭비하게 되기 때문이다. 근데 여기서 또 함정이 있다. 과연 그냥 성능일까? String으로 새로운 문자열을 만들게 되었을 때 문제가 된다. 그럼 왜? String을 무분별하게 사용하면 성능에 문제가 생길까? 그 이유는 String은 불변 객체이기 때문이다. String 자바에서 String은 아주 많이 사용되는 참조형 변수이다. 일반적으로 많이 사용하는 기본형 변수와 다르게 객체를 만들고 주소에 대한 값을 참조하여 찾아오게 된다. 또한, String은 지정..
JVM 이란?
·
Java
이번 JVM 에 대하여 학습을 하게 되면서 크게 학습할 내용은 JVM 이 무엇인가 JVM 의 동작 방식을 알아보자 JVM 의 내부 구조를 알아보자 크게 이 3가지이고, 안에 들어가면 더 세세한 정의가 있으니 꼭 숙지하자. 근데 왜 JVM 을 공부해야할까? 개발자가 이런거를 알면 뭐가 좋을까? 그냥 개발만 하면되는거 아닌가? 라고 생각할 수 있다. 나는 항상 무엇을 공부할때는 왜 이걸 공부할까? 의심하곤하려고 한다. 작은 프로젝트 또는 간단한 프로젝트의 경우에는 JVM 메모리에 대한 이해가 필요없다. 왜냐하면 그냥 사용하면 되니까 하지만 대규모의 프로젝트를 개발해야 할 때는 적어도 Java로 개발한다면, JVM메모리 구조에 대한 이해는 필수적이며 기본적으로 알아야 할 개념인 것이다. 메모리 관리에 따라서 ..