본문 바로가기

책을 읽겠습니다!23

[자바 성능 튜닝 이야기] 구글에서 이야기하는 안드로이드 성능 개선 같은 자바를 대상으로 하는 내용이라 참고했습니다. 기본적으로 안드로이드에 해당되는 내용입니다. 필요없는 객체 생성은 피하자 1) String 대신 StringBuffer 2) Integer 배열 대신 int 배열 3) 다차원 배열 대신 1차원 배열 객체 덜 생성되고, GC도 적게 발생 static을 적절히 사용하자 인스턴스 변수에 접근할 일이 없을 경우 static 메서드를 선언하여 호출하는 것은 많게 20퍼센트의 성능 개선이 발생할 수 있다. 상수에는 static final 을 사용하자 변하지 않는 상수를 선언할 때 이를 선언할 경우 static으로 선언할 때 저장되고 참조되는 위치가 달라진다. static final의 속도가 훨 빠르다. 상수화되면 constant folding 발생해 컴파일 타임에 .. 2023. 9. 15.
XML과 JSON도 잘 쓰자! & 서버를 어떻게 세팅해야 할까?! 설정파일이나 DB 쿼리, 주고 받는 데이터들을 XML과 JSON으로 사용하는 경우가 많은데 잘 알고써야한다. XML은 eXtensible Markup Language의 약자로 장점은 누구나 데이터의 구조를 정의하고 그 구조를 공유함으로 일관된 데이터 전송, 처리를 할 수 있다 그리고 이러한 특성 때문에 파싱을 해야한다. 구조에 맞게 처리를 한다는 것. 자바에서는 XML 파싱 위해 JAXP 제공 SAX는 순차적 방식으로 처리, DOM은 모든 XML 읽어 트리 만든 후 처리(메모리 부담이 커) 서버단에서 사용하기 적합한 건 SAX와 DOM. SAX 파서 순차적으로 처리하는 이벤트 기반 모델. DOM보다 손이 많이 간다 DOM 파서 트리 형태의 데이터로 만든 후 가공한다. 결과는 SAX 파서 써라.. XML .. 2023. 9. 12.
DB를 사용하면서 발생 가능한 문제점들 JDBC 관련 API는 클래스가 아닌 인터페이스. JDK의 API에 있는 java.sql 인터페이스를 각 DB 벤더에서 상황에 맞게 구현했다. (벤더에 따라 처리능력 다를 수 있다) 기본적으로 DB와 연결이 될 땐 Connection 객체를 만들고 쿼리를 수행하여 데이터를 받은 뒤 다 사용한 후 Connection 객체를 닫는다. 세션 공부할 때와 비슷. 이 중에서 가장 시간을 많이 소모하는 부분은 Connetion 객체를 얻는 부분이다. DB와 WAS 사이에 통신이 필요하기 때문 이 때 Connection 객체를 생성할 때 대기시간을 줄이고 네트워크의 부담을 줄이기 위해 사용하는 것이 DB Connection pool이다. DataSource JDK 1.4부터생긴 표준: Connection Pool로 .. 2023. 9. 12.
Extreme Programming Explained 2/E 1판 슬로건: 깨어 있으라, 적응하라, 변하라 2판 슬로건: 변화를 포용하라 XP 적용의 원칙 낮은 곳의 과일부터 가장 핵심적이고 괴로운 문제부터 (근본 원인 분석) 성공에 집중하기 (잘 안 되는 것보다 뭐가 잘 되는 지에 집중 잘 안 되면 방법을 바꿔서 문자에 집착하지 않고 점진적으로 (아기 걸음) 자신의 상황에 맞게 XP의 에자일 방식을 적용해보고 그 경험을 상기시키자. 즉각적인 피드백 추천인이 말하는 에자일 방법 초기에, 자주, 자동화해서 테스트하라: 최신 빌드에서는 녹색 체크 표시를 바등려면 테스트를 21,000개 이상 통과해야합니다. 점진적 설계: 우리는 매일 설계에 일정 자원을 투자합니다. 하지만 우리에게는 API를 안정되게 유지해야한다는 추가 제약이 있다. 매일 배치(deploy): 컴포넌트.. 2023. 9. 5.
자바 성능 튜닝 이야기 디자인 패턴 꼭 쓰자 대표적으로 MVC 패턴이나 J2EE에서 사용된 패턴이 나온다. 뷰는 결과를 보거나 입력하는 화면 (frontend layer) 모델은 입력되어 치리된 내용을 저장, 관리, 수정한다. (DB) 컨트롤러는 이 둘을 이어주는 역할. MVC 패턴이 좋은 디자인 패턴인 예로는 JSP 모델1을 예로 뷰와 비즈니스 모델의 분업화가 힘들어 사람에 따라 코드의 변경이 많이 일어날 수 있다. 모델 1은 JSP로 요청을 직접하지만 2는 서블릿으로 요청을 한다. 성능적 차이는 없더라도 협업과 코드유지보수의 관점에서 이점이 있다. 디자인 패턴은 의미 있는 클래스들을 묶은 각각의 집합을 이른다.. 이러한 집합들을 구조적으로 배치한 것. J2EE 패턴에 괴상한 패턴들이 되게 많다 .. 이걸 다 공부하라는 건 .. 2023. 9. 4.
[Java 8 in Action] 52 ~ 61 요약 스트림 기존에는 컬렉션 API를 통해서 반복 과정을 직접처리하였습니다. (외부 반복) 반면 스트림 API를 이용하면 루프를 신겅 쓸 필요가 없습니다. 스트림 API에서는 라이브러리 내부에서 모든 데이터가 처리됩니다. (내부 반복) 컬렉션을 이용했을 때 다른 문제가 생길 수 있습니다. 예를 들어 많은 요소를 가진 목록을 반복한다면 오랜 시간이 걸릴 수 있습니다. 이럴 경우 멀티코어 컴퓨터를 통해 서로 다른 CPU 코어에 작업을 각각 할당해서 처리 시간을 줄일 수 있다면 좋을 것입니다. 멀티스레딩은 어렵다 이전 자바 버전에서 제공하는 스레드 API로 멀티스레딩 코드를 구현해서 병렬성을 이용하는 것은 어렵습니다. 멀티스레디 환경에서 각각의 스레드는 동시에 공유된 데이터에 접근하고, 데이터를 갱신할 수 있습니다.. 2022. 10. 6.
[Java 8 in Action] 35 ~ 51 요약 Java는 지속적으로 발전하고 있다! Java는 과거부터 현재까지 발전하고 있으며 1.8에 들어와서는 컴퓨터 아키텍쳐(멀티코어 CPU)의 발전을 염두해두고 정말 많은 기능들이 추가 되었습니다. 특히 병렬적인 처리에 두고 Stream API, 함수형 프로그래밍 등이 대표적으로 추가되었습니다. 이 책에서는 Strem API를 가장 먼저 소개하려합니다. Stream API는 코드르 간결하고 직관적으로 만들 뿐만 아니라 멀티코어 프로세서의 병렬적인 프로그래밍에도 큰 역할을 합니다. 이 책에서는 Sream을 통해 자바 8은 데이터베이스 질의 언어에서 표현식을 처리하는 것처럼 고수준 언어로 원하는 동작을 표현하고 구현(Stream API)에서 최적의 저수준 실행 방법을 선택하는 방식으로 동작시킨다고 합니다. 즉, .. 2022. 10. 6.