Java
-
이펙티브 자바 [2] 객체 생성과 파괴Java 2022. 11. 8. 15:42
생성자 대신 정적 팩토리 메서드를 고려해라 (아이템 1) 디자인 패턴의 팩토리 메서드와는 다름 클라이언트가 클래스의 인스턴스를 얻는 수단으로는 public 생성자 외 클래스는 정적 팩토리 메서드를 제공할 수 있다. 정적 팩토리 메서드의 장점 이름을 가질 수 있음 클래스의 시그니처가 같은 생성자가 여러 개 필요 시 생성자를 정적 팩토리 메서드로 변경하고 각각 차이점을 잘 알아 볼 수 있는 이름으로 지어주자 호출 시 매번 인스턴스를 새로 생성하지 않아도 된다. 새로 생성한 인스턴르를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있음 (플라이웨이트 패턴) 반복되는 요청에 같은 객체를 반환하는 식으로 언제 어느 인스턴스가 살아 있게 할지를 철저히 통제할 수 있다. 플라이웨이트 패턴 인스턴스를 공유시..
-
서블릿 동작원리Java 2021. 9. 16. 19:59
서블릿 서블릿의 동작원리 클라이언트가 URL 요청 시 HttpRequest 객체를 생성하여 서블릿 컨테이너로 전송한다. HttpRequest 요청을 받은 서블릿 컨테이너는 HttpServletReq, HttpServletResp 두 객체를 생성한다. 사용자의 요청을 분석하여 맞는 서블릿을 생성 후(init() ) 요청을 전송한다. 이 과정은 Web.xml 에서 직접 서블릿 매핑 설정을 해주어야 한다. Spring boot 에서는 자동으로 매핑 설정을 해줌 해당 서블릿에서 service() 메소드를 호출하며, GET / POST 요청에 맞는 doGet(), doPost() 메소드를 호출한다. 개발자가 잘 처리해서 만든 동적페이지를 HttpServletResponse 담아 클라이언트 요청에 응답한다. 응답이..
-
냄새와 휴리스틱Java 2021. 7. 22. 16:01
주석 부적절한 정보 주석은 코드와 설계에 기술적인 설명을 부연하는 수단이다. 쓸모 없는 주석 오래된주석, 잘못된 주석, 중복된 주석, 성의없는 주석은 빠르게 삭제하자 주석 처리된 코드 주석으로 처리된 코드는 읽는 사람을 헷갈리게 하며, 자신이 포함된 모듈을 오염시킨다. 즉시 삭제하자 - 정말 필요한 코드라면 소스코드 관리 시스템에서 이전버전을 가져오면 된다. 환경 빌드 및 테스트 빌드 및 테스트는 모두 한 단계, 한 명령으로 끝내야 한다. - 빌드의 경우 소스 코드 관리 시스템에서 이것저것 따로따로 체크아웃할 필요가 없어야 한다. - 테스트의 경우 한 번에 실행하는 능력은 아주 근본적이고 아주 중요하기에 그 방법이 빠르고, 쉽고, 명백해야 한다. 함수 인수 함수에서 인수 개수는 적을수록 좋으며, 넷이 넘..
-
메서드 메모리관리Java 2020. 6. 17. 14:50
다른 클래스의 메서드를 사용을 해야할때 new로 생성 후 사용하는게 올바를지? 아니면 static으로 메서드를 구현 후 사용하는게 올바를지??? 자주 사용을 하는지 여부로 결정한다. 자주 라는 단어의 정의는 동작을 하면서 자신이 원하는 메서드가 실행이 얼마나 되는지로 구분한다. 하나의 동작을 하면서 메서드가 무조건 실행될 경우 1:1 임으로 1000번 작업중 1000번이 호출을 시도하기에 static 으로 구성하는게 올바르다. 반면 하나의 동작을 하면서 메서드가 실행될 수도 안될 수도 있으며 평균 실행될 확률이 낮다면 new로 새로운 객체를 생성 후 사용하는게 올바르다. 하지만 실행될 확률이 높고 낮음은 본인이 판단하여 사용한다. ( 10번중 3번 이상 사용되면 static으로 사용한다 )
-
jMeter 사용하기 (with MQTT)Java 2020. 5. 12. 14:35
1. jMeter? jMeter는 부하 테스트, 성능 평가를 위해 설계된 자바 기반의 옾느소스 데스크톱 어플리케이션이다. jMeter을 이용하면 Open API 서버의 대한 기능 점검(1), 수용량 측정(2) 및 부하 테스트(3)가 가능하다. 기능 점검 기능 점검은 Open API의 사용자 정보, 게임 정보, 채널 정보 및 컨텐츠 정보 서비스에 포함도니 각각의 API에 대한 정상 동작 유무를 테스트하는 테스트 케이스를 작성한다. 기능 테스트의 목적은 품질 확보이다. 수용량 측정 수용량 측정은 사용자의 서비스 사용 시나리오를 예측하여 시나리오 기반의 테스트 케이스를 작성하고, 이를 이용해 서비스 환경을 시물레이션 한다 . 다수의 가상 사용자가 접속하여 소규모 서버에서 수용 가능한 동시 사용자 수를 산출한다..
-
소켓 통신 I/O StreamJava 2020. 5. 7. 14:48
I/O Stream Stream : 연속적으로 단방향으로 흘러가는 것을 의미하며, 데이터는 출발지에서 나와 도착지로 흘러간다는 개념이다. 스트림 통신은 단방향 통신을 하기에 하나의 스트림으로 입출력 동시에 할 수가없다... 그렇기에 데이터를 보낼때에는 OutputStream 을 사용한다. 그렇기에 데이터를 받을때에는 InputStream 을 사용한다. java.io 패키지 파일 시스템의 정보를 얻기 위한 File클래스와 데이터 입출력을 하기위한 I/O Stream 클래스가 제공된다. 바이트 단위 입출력 스트림 : 그림, 멀티미디어, 문자등 모든 종류의 데이터들을 주고 받을 수 있다. 문자 단위 입출력 스트림 : 오로지 문자만 주고받을 수 있게 특화 되어있다. Java.io 패키지의 주요 클래스 설명 Fi..
-
JNI 사용하여 Native Method를 가동시켜 HelloWorld를 찍기Java 2020. 4. 24. 19:16
소스 코드입니다. github https://github.com/hodolee246/intellij-on-my-own/tree/master/jnisample ubuntu 환경에서의 Java JNI 사용하여 HelloWorld찍기! 목차 1. HelloJni.java 작성 2. HelloJni.java 컴파일 3. HelloJni.h header파일 생성 4. HelloJni.c 파일 생성 5. hellojni.so 파일 생성 6. 환경변수 입력 7. 실행 HelloJni.java public class HelloJni { native void printHello(); static { System.loadLibrary("hellojni"); } } 1. HelloJni.java 작성 먼저 HelloJni...
-
JNI란?Java 2020. 4. 23. 17:52
JNI(Java Native Interface) 란? 위에서 말씀드린대로 JVM을 통하여 Java언어로 해결이 안될경우 대처할 수 있는 방법중 하나입니다. 운영체제 고유능력(native)을 Java로 해결 하는 것이 아닌 C, C++등으로 운영체제 고유 기능을 만드는겁니다. 그러한 Native Library를 실행 시키기 위해서는 JNI를 통하여 JVM에서 실행시킵니다. 분홍색이 JNI라고 생각하면 됩니다. 참고로 Java에서 JNI를 사용하기 위해서는 C or C++ 코드가 존재해야합니다. 확장자 **Window에서는 == .dill AND Linux에서는 == .so**