Back-end/Java Language 30

System.out과 logging

1. System.out과 logging https://blog.silentsoft.org/archives/13 Logging을 System.out으로 하면 안되는 이유 운영 시스템에서 System.out으로 로그를 남기는 경우는 없다고 봐도 무방하다. 또, ‘Logging은 절대 System.out으로 하면 안 된다’고 생각하는 사람이 많다. 그런데 아이러니하게도 그 이유를 모르는 blog.silentsoft.org 요약 에러/장애 발생 시 추적할 수 있는 최소한의 정보가 없다. 최소한의 정보는 고사하고, 로그 내용을 가져오기 어렵다. 누가 봐도 System.out.println은 콘솔에 로그를 출력하는 API이다. 성능저하 원인이 될 수 있다. -> 참고 (https://junghyungil.tist..

스트림(stream)

1. 스트림이 생기게 된 배경 통상적으로 많은 수의 데이터를 다룰 때 컬렉션이나 배열에 데이터를 담고 for문과 Iterator를 이용해서 코드를 작성해왔다. 그러나 이러한 방식으로 코드를 작성한다면 너무 길고 알아보기 어려우며 재사용성도 떨어진다. 또한, 데이터 소스마다 다른 방식으로 다루어야 한다. 예를 들어 List를 정렬할 때는 Collections.sort(); 배열을 정렬할 때는 Arrays.sort(); 이러한 문제점을 해결하기 위해 스트림이 만들어졌다. 스트림은 데이터 소스를 추상화 함으로써 데이터 소스가 무엇이든 간에(List, Set, Map, 배열, 파일에 저장된 데이터 등) 같은 방식으로 다룰 수 있게 되었으며 이로 인해 코드의 재사용성이 높아졌다. 2. 스트림 생성 //주문 상품 ..

변수명 짓는 방법

1. 변수명을 거의 동사로 시작하지 않는다.(boolean변수는 isLoggedIn) 명사, 형용사, 부사만 들어간다. 2. 최대한 간결하게 && 의미 명확히 전달되게 3. 관사 쓰는거 아니다. auser 이런 거 안된다. (users-복수, user-단수) 4. 전치사 쓰는 것 아니다.(~의 갯수) numberOfUsers 보다는 userCount아니면 numUsers 5. 마이크로소프트 오픈소스보면 변수명 잘 지어져있다. https://tecoble.techcourse.co.kr/post/2020-04-24-variable_naming/ 좋은 코드를 위한 자바 변수명 네이밍 JAVA… tecoble.techcourse.co.kr

@SuppressWarnings

1. @SuppressWarnings 이란? @SuppressWarning 어노테이션은 컴파일 경고를 사용하지 않도록 설정해주는 것으로 컴파일 에러가 나올 때 그 경고를 없앨 수 있도록 하는 것이다. 두 가지 종류를 같이 사용할 때는 @SuppressWarnings({"unused","unchecked"})처럼 객체 형식으로 묶어서 사용할 수 있다. //unused : 사용하지 않는 코드 또는 불필요한 코드가 있을 경우 경고를 억제시킨다. @SuppressWarnings("unused") private final Logger logger = LoggerFactory.getLogger(getClass()); //all : 모든 경고 //cast : 캐스트 연산자 관련 경고 //dep-ann : 사용하지 말..

ENUM

1.열거형이란? 관련 상수(열거형 상수는 객체임)들을 같이 묶어 놓은 것을 말한다. java의 열겨형은 값과 타입 둘다 체크함 2. 열거형 정의하는 방법 enum 열거형 이름{ 상수명1, 상수명2, ...} enum Direction {EAST, SOUTH, WEST, NORTH} class Unit{ int x, y; Direction dir ; //열거형을 인스턴스 변수로 선언 void init(){ dir = Direction.EASE; //유닛의 방향을 EAST로 초기화(클래스의 static 변수를 참조하는 것과 동일) 열거형 상수 비교에 ==와 compareTo(비교연산자 사용 불가 대신 compareTo사용)사용가능 compareTo 같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수 3. 열..

람다식(Lamda expression)

1. 람다식이란? 자바는 람다식의 도입으로 인해 객체지향언어인 동시에 함수형 언어가 되었다. 람다식의 장점은 과거 메서드보다 간결하며 이해하기 쉽다는 것이다. 모든 메서드는 클래스에 포함되어야 해서 클래스를 새로 만들어야 했고 객체를 생성해야 메서드를 호출할 수 있었지만, 람다식은 람다식 자체로 이 모든과정을 해결할 수 있다. 람다식은 아래와 같이 표현된다. 반환타입 메서드이름(매개변수 선언){ 문장들} (매개변수 선언) -> {문장들 } //ex1) int max(int a, int b){ return a>b? a:b; } //람다식으로 변환하면 (int a, int b) ->{ return a>b? a:b;} (int a, int b) -> a>b? a : b (a,b) -> a>b? a:b //ex..

Scanner

1. 특징 1) 입력을 받을 때 String으로 받고 싶으면 next() 혹은 nextLine()을 사용하면 되고 int 로 입력받고 싶을 경우 nextInt()를 사용하여 입력받으면 된다. 2) 공백(띄어쓰기) 또는 개행(줄 바꿈)을 기준으로 읽는다. Scanner의 입력 메소드들은 대부분 공백과 개행(' ', '\t', '\r', '\n')을 기준으로 읽는다. 2. 사용예시 import java.util.Scanner;// Scanner 클래스 호출 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in);// Scanner 객체 생성 byte a = in.nextByte(); // b..

0. StringBuilder vs. StringBuffer

1.String String은 Immutable 하기 때문에 값을 변경할 수 없다. 따라서. concat()을 이용하여 값을 덧붙일 때 기존 String에 있던 값을 버리고 새로운 값을 할당한다. (concat이나 +를 사용하면 속도가 현저히 느려짐- 힙 메모리에 많은 임시 가비지가 생성되므로 힙 메모리 부족으로 애플리케이션 성능에 영향을 끼친다. ) 2. StringBuffer, StringBuilder String과 반대로 StringBuilder, StringBuffer는 가변성을 가지기 때문에 .append(), .delete()등의 api를 이용해서 동일 객체 내에 문자열을 변경하는 것이 가능하다. 멀티 쓰레드 환경에서 StringBuffer를 사용하여 값이 예상치 못하게 변경되는 것을 방지할 ..