본문 바로가기

Jave & Kotlin27

자바의 정석 - 자바 기본기 정리하기 (12)쓰레드 들어가며 문제 구현에 있어서 자바에 대한 기본기의 부족함을 느껴서 오랜만에 자바의 기본 저서인 자바의 정석을 다시 피게 됐다. 그러면서 정말 신기한 경험을 하게 되었는데 바로 예전에 잘 이해가 안가서 읽고 넘어갔던 내용들이 이제는 내 머릿속에서 자연스럽게 그려지는 경험을 하게 되었다. 그동안에 시간들이 헛되지는 않았나보다. 어느 곳에서나 기본기는 중요하듯이 이번 기회를 통해 자바 기본기를 더 단단히 다지고자 챕터별로 글로 정리하면서 다시 한번 암기를 하고 좀 더 디테일하게 알아야 되는 곳은 챕터를 나눠서 자바의정석에 나온 내용 + 보강된 내용을 더해서 정리를 하고자 한다. 정리 프로세스와 쓰레드 프로세스란 간단히 말해 실행 중인 프로그램이다. 프로그램을 실행하면 os로 부터 실행에 필요한 메모리를 할당 .. 2021. 11. 25.
JAVA - 하드코딩을 피하기 위한 자바의 상수 만들기 들어가며 하드코딩을 피하기 위한 자바의 상수 만들기에 대해 알아본다. 하드코딩 코딩을 하다보면 다들 한번씩 하드코딩을 피하라는 말을 들은 적이 있을 것이다. 하드 코딩이란 변수에 값을 그냥 넣는 것을 의미한다. 혼자 진행하는 프로젝트면 모를까 협업한다면 하드코딩은 무조건 피하는 것이 좋다. 값의 의미를 알 수가 없고 프로젝트의 규모가 커지면 유지보수할때 매우 어려워지기 때문이다. 상수 상수란 항상 변하지 않는 값을 상수라고 한다. 즉, 초기화되는 순간 그 값을 바꾸지 못한다. 자바에서의 상수는 final 예약어를 사용해서 선언한다. final이라는 단어에서도 알 수 있듯이 마지막으로 정했으니 값을 변경할 수 없다! 라고 외우면 쉽다. 상수 컨벤션 각각의 언어마다 코딩 컨벤션이 존재한다. 그안에는 네이밍도.. 2021. 11. 1.
JAVA - String / StringBuffer / StringBuilder 정리 JAVA - String / StringBuffer / StringBuilder 정리 다음 3가지 클래스는 자바에서 대표적으로 문자열을 다루는 클래스들이다. 어떠한 차이점들이 있는지 정리해본다. String String과 StringBuffer/StringBuilder에 가장 큰 차이점은 String은 불변(Immutable)의 속성을 갖는다. 여기서 불변이란 객체가 생성된 후 내부의 상태가 변하지 않고 계속 유지되는 객체를 말한다. 이 말은 즉, 변수에 객체가 할당이 되면 해당 객체의 참조를 변경할 수도, 내부의 상태를 수정할 수도 없는 것이다. String str = "hi"; 를 선언한 후에 str = str + "hello"; 를 하게 되면 hi를 저장하고 있던 참조변수 str에 hello가 들어.. 2021. 10. 4.
JAVA8 IntStream을 이용한 반복문 JAVA8 IntStream을 이용한 반복문 Stream이란 다양한 데이터를 표준화된 방법으로 다루기 위한 라이브러리이며 자바8부터 추가되었다. 여러 종류(LongStream, DoubleStream..)에 스트림이 있지만 오늘은 그중에 IntStream에 대해 정리한다. IntStream을 이용하여 반복문을 처리하게 되면 코드가 줄고 가독성이 좋아진다. 그렇지만 모든 상황에서 IntStream을 사용하는 것보단 상황에 따라 적절한 반복문을 쓰는 것이 필요하다. 간단한 예제를 통해 차이를 알아본다. for & IntStream 아래는 일반적인 1부터 10까지 차례대로 출력하는 for문이다. public void loop() { for (int i = 1 ; i { //수정 if (i >= 5) { ret.. 2021. 9. 15.
Lombok 라이브러리 자주 사용되는 어노테이션 정리 Lombok 라이브러리 자주 사용되는 어노테이션 정리 코드를 작성할때 반복되는 코드들을 줄여주는 라이브러리이다. 도메인 객체나 Entity 와 같은 클래스를 만들때 수 많은 멤버변수들이 있고 상황에 맞게 getter와 setter, toString, 생성자 등을 만들 필요가 있는데 이러한 코드 중복을 롬복을 통해 간단한 어노테이션 선언만으로 사용할 수 있다. 코드상에서는 롬복 어노테이션만 보이지만 컴파일과정에서 선언한 어노테이션에 맞는 코드가 작성되어 컴파일이 된다. 이러한 점들로 인하여 생산성이 향상되며 가독성이 올라가게 된다. 이제 자주 사용되는 어노테이션을 정리한다. @Getter // @Setter 접근자와 설정자 생성. 선언된 필드에 getter와 setter를 자동 생성해준다. 사용법은 필드명.. 2021. 9. 11.
Logging 할때 System.out을 지양해야 되는 이유 Logging 할때 System.out을 지양해야 되는 이유 개발을 하다보면 정상적으로 작동을 하는지나 에러등을 확인하기 위해 로그를 확인한다. 처음에 배우는 것이 바로 System.out으로 콘솔에 출력하여 로그를 남겨 확인하는 것인데 실제 운영 시스템에서는 System.out으로 로그를 남기는 경우는 거의 없다. 여기까지 아는 사람은 많이 있을 것이지만 정확히 왜 System.out으로 로그를 남기면 안되는지에 대해서는 모르는 사람들도 많다. 어떤 이유에서 System.out을 지양해야되는지 정리한다. 1. System.out은 리소스를 많이 사용하여 성능 부하를 초래한다. (로그 라이브러리는 내부 버퍼링, 멀티 쓰레드 등을 지원해서 성능이 System.out 보다 좋음) 2. 에러 장애 발생 시 추.. 2021. 8. 8.