본문 바로가기

공부/JAVA19

[모던 자바 인 액션][Java] 3.람다 표현식 많은 책과 글들을 봤지만, 사실 람다라는 개념이 조금 어려웠다. 내가 이해할 수 있는 언어로 쓰여진 글들이 없어서, 모던자바 인 액션을 공부하며 내 나름대로의 기록을 해본다. 보통 공부하는 내용들은 깃헙에 올리기는 한다. 딱 일목요연하게 정리만 된 글도 좋지만, 내가 이해한 것들을 의식의 흐름대로 정리해보기 위해서 이 글은 따로 티스토리에 박제한다. Java8 람다 람다를 한 단어로 말하자면, "익명함수"이다. 익명클래스나 익명함수를 쓰는 이유가 뭘까? 많은 블로그 글에서도 접할 수 있듯, "한번만 사용되고 버려지는", "재사용되지 않는" 코드를 사용할 때 쓰일 수 있다. Java8 이전의 버전에서는 보통 이렇게 한번 쓰고 버려지는 코드의 경우, 익명 클래스라는 방법을 통해 해결하였다. 익명 클래스의 경.. 2022. 4. 3.
[Java] JVM의 구조 JVM의 구조 JVM(Java Virtual Machine) 자바가상머신 Java 프로그램을 실행할 수 있는 가상머신 Java 파일을 compile 하는 과정을 거치면, Byte 코드로 이루어진 class 파일이 만들어진다. JVM 은 해당 바이트 코드를 읽으면서 필요한 부분에 대해 메모리에 올리는 작업을 하게 된다. JVM내부에서도 여러가지 구조가 나뉘어져있는데, 각각은 다음과 같은 역할을 한다. Class Loader Byte 코드(클래스파일) 을 읽어 메모리에 올리는 역할을 한다. 메모리 스택, Heap, 메서드 영역으로 나뉘어진다. 스택 영역 : 메서드 호출을 스택프레임이라고 부르는 블럭으로 쌓는다. Heap : 객체를 저장한다. 메서드 영역 : 클래스 수준의 정보를 저장한다. (Class 의 이.. 2022. 3. 16.
이펙티브 자바 4장 규칙14. public 클래스 안에는 public 필드를 두지 말고 접근자 메서드를 사용하라 Public 클래스의 경우 선언된 패키지 밖에서도 사용가능한 클래스에는 접근자 메서드를 제공하라. 그래야만 클래스 내부 표현을 자유로이 수정 가능하게 됌 하지만, immutable 필드의 경우 필드를 외부로 공개한다고 해도 심각성이 좀 덜할 순 있음 그래도 그럴 필요가 있는지는 의문 Package-Private 클래스나 private중첩 클래스의 경우 데이터 필드를 공개하더라도 잘못은 아님. 되려 더 깔끔한 코드가 될 수도 있음. 결론적으로, 되도록 필드를 외부로 공개하는 행위는 하지 않는 것이 좋다는 것. 2021. 3. 14.
이펙티브 자바 4장 규칙13. 클래스와 멤버의 접근권한은 최소화하라 13장. 클래스와 멤버의 접근권한은 최소화하라. 잘 설계된 모듈의 경우, 구현 세부사항을 다른 모듈에 잘 감추어야 함. 즉, 정보은닉 및 캡슐화가 잘 되어야 함 이를 위한 원칙 1. 각 클래스와 멤버는 가능한 한 접근 불가능하게 만들어야 한다 2. 최소한의 public API를 설계하고 다른 모든 클래스, 인터페이스, 멤버는 API에서 제외할 것 3. Public static final 필드를 제외한 어떤 필드도 public 선언하지 말라. 4. Public static final 필드가 참조하는 객체는 변경불가능 객체로 만들라. 2021. 3. 14.
[Spring] JSP 한글깨짐 수정 다시금 스프링을 처음 배웠을 때의 기억을 되살리려 Spring 프로젝트를 혼자 구축해보고, 평소 일 할 때는 직접 구현을 잘 하지 않는 이런저런 기능들을 구현해보기로 했음. 최근 업무를 하며 대용량 엑셀 다운로드 기능을 구현할 일이 있었는데, 속도가 나지 않아 직접 다운로드 로직을 구현함. 이 경험을 계기삼아서 오늘부터 책도 읽으면서 간단한 실습을 조금씩 해보고자 함. 기존에 깔아놓은 톰캣을 추가했는데, 뭔가 파일이 꼬였는지 제대로 config 파일을 불러오지 않아, 재설치를 하였음. 프로젝트를 하나 추가하고, 서버를 시작한 후 생각없이 http://localhost:8080/ 를 쳤는데 404 에러가 떠, tomcat 서버의 module 탭에 내가 추가해준 프로젝트의 경로를 '/' 로 수정. home... 2021. 3. 13.
이펙티브 자바 3장 규칙 12. Comparable 구현을 고려하라 Effective Java 3장 객체의 생성과 삭제 규칙 12. Comparable 구현을 고려하라 CompareTo compareTo 메서드는, Object 에 구현되지않았으며, Comparable 인터페이스에 있는 유일한 메소드 단순 동치검사 외 순서비교가 가능한 메서드임. 거의 모든 자바 플랫폼 라이브러리에 포함된 값 클래스는 해당 인터페이스를 구현한다고 보면 됌. compareTo 메서드 일반규약 일반적으로 해당 규약을 가지는데, 이는 규칙8의 equals 와 매우 유사함. sgn(x.compareTo(y) == -sgn(y.compareTo(x))) x.compareTo(y) > 0 && y.compareTo(z) > 0 이면, x.compareTo(z) > 0 x.compareTo(y) == .. 2021. 2. 17.