Programming/Java

Programming/Java

[Java] Enum 은 == 비교 아니면 equals() ?

그 동안 써야지,, 하면서 계속 임시 저장되고만 있었던 게시글을 마무리 해보려고 한다. 최근 회사 내부에서 CI/CD 파이프라인에 소나큐브를 도입하면서 코드 리뷰 또한 많이 활성화가 되었다. 그중 Enum 타입에 대한 비교에 대해서 짧게 코드리뷰를 한 내용이 있는데 내용을 축약해서 정리해본다. # 발단 - 내가 등록한 PR에 있던 코드 중 특정 코드가 대략 아래처럼 되어있었다. public enum PaymentType REMITTANCE, ACCOUNT_TRANSFER, VISA_MASTER_CREDIT_CARD } public void someThingMethod(UserRequest userRequest){ if(userRequest.getPaymentType() == PaymentType.REMI..

Programming/Java

[인프런/호주 현직 자바 개발자가 묻고 답하는 영어 기술 면접] 강의 정리

JVM, JRE, JDK의 차이 JVM : 컴파일된 바이트 코드가 실행되는 머신 JRE : 자바가 구동 될 수 있는 환경 (JVM + Bytecode Verifier + Class Loader) JDK : JRE + 개발을 위한 여러 toolkit (javac, javadoc.. etc) AutoBoxing과 Unbokxing primitive 자료형은 stack 영역에서 관리되는 가벼운 데이터 wrapper class는 heap 영역에서 관리되고, 이에 대한 주소 참조 값이 stack영역에서 관리됨. Autoboxing : primitive 자료형 (int, long, float, double)이 이에 대응되는 Wrapper Class Integer, Long, Float, Double로 형변환이 되는..

Programming/Java

[백 투 더 베이직] 객체지향 SOLID 원칙

SOLID원칙 SRP(Single Responsibility Principle): 단일 책임의 원칙 → 클래스는 단 하나의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다. OCP(Open-Closed Principle): 개방 폐쇄 원칙 → 확장에는 열려있어야 하며, 변경에는 닫혀있어야 한다. LSP(Liskove Substitution Principle): 리스코프 치환 원칙 → 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작 해야한다. ISP(Interface Segregation Principle): 인터페이스 분리 원칙 → 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. DIP(Dependency ..

Programming/Java

[삽질일기] Arrays.asList 와 ArrayList의 차이

코딩을 하다 보면, 배열 또는 List 형태가 아닌 데이터를 List 데이터 타입으로 만들 때 간편하게 Arrays.asLIst 메서드를 활용해서 그동안 리스트 데이터를 만들고 있었다. List score1 = Arrays.asList(1, 2, 3, 4, 5); 그러다가 Arrays.asList로 만든 List A에서 DB에서 조회한 List B의 값을 빼야 하는 경우가 생겼고 아무 생각 없이 다음과 같이 코드를 작성해봤다. List score1 = Arrays.asList(1, 2, 3, 4, 5); // DB에서 값을 가져옴 List score2 = getSomeDataFromDatabase(); // DB 값을 제외한 나머지 값을 찾아보자! score1.removeAll(score2); 그랬더니,..

Programming/Java

[Java8] 함수형 인터페이스와 람다 표현식

java 8 버전을 꽤 오래 사용했었는데, 제대로 공부한 적이 없는 것 같아 조금씩 정리해보는 포스팅을 써본다. 함수형 인터페이스 (Functional Interface) https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.8 Chapter 9. Interfaces If a single field is inherited multiple times from the same interface because, for example, both this interface and one of this interface's direct superinterfaces extend the interface that declares the field, th..

Programming/Java

객체, 클래스 그리고 인스턴스

출퇴근 길이나, 자기 전에 가끔 okky나 velog 등등 개발자 커뮤니티를 한번 훑어보며, 오늘은 무슨 재밌는 이야깃거리가 없나 하고 보는 경우가 있다. 그러던 중 객체, 클래스, 인스턴스에 대한 정의가 무엇인지 물어보는 글이 있어서 곰곰이 생각해보다가 한번 정리를 해본다. 기본적으로 프로그래밍은 실세계에서의 문제를 해결하기 위한 목적(?) 또는 방향성을 지니고 있고, 해당 문제를 어느 정도 추상화해서 다룬다. 이때 실세계에 있는 어떠한 것들을 객체지향에서는 객체라고 가리키고 있다고 생각한다. 예로 내가 학생부 프로그램을 만든다고 했을 때, 학생부에 기입되는 학생들은 하나의 객체이고, 학생부 또한 객체이다. 넓은 의미에서 객체는 우리가 인지를 하고 있는(식별 가능한) 유형, 무형 모든 것을 객체라고 생..

Programming/Java

[Java] CMD 또는 Shell 환경에서 Java 컴파일 및 Jar 파일 만들기

보통 프로그래밍 언어를 통해 프로그램을 만들 때, IDE를 사용하여 소스를 컴파일하고 빌드하며 실행시킨다. 이러한 경험(?) 혹은 시간이 길어질수록 어쩌면, 어떤 사람은 IDE에서 자동으로 프로그램을 실행시키기까지의 과정 및 방법에 대하여 잊는 경우도 생기게 된다. 그런 사람(==나)을 위하여 Java 언어로 작성된 소스파일을 컴파일하고 실행 가능한 Jar 파일을 명령어를 통해 만드는 방법을 공유해본다. 내가 작성한 Java 소스 파일은 매우 간단하다. 심심풀이로 CPU Load Simulcast 프로그램을 만들어봤다. [CPULoadThread.java] package com.tistory.johnmark; public class CPULoadThread extends Thread { private f..

Programming/Java

[Java8] 윤년, 다음달 말일 계산

요즘 회사에서 결제 시스템과 연동되는 라이선스 서버를 개발하면서 라이선스 만료일을 계산하는 로직을 구현하게 되었다. 서비스 특성상 정기결제가 이루어지기 때문에 라이선스 기간을 산정하는데 다음과 같은 문제점이 있었다. 1. 라이선스 기간은 결제일로부터 한 달만 활성화된다. 2. 사용자가 말일에 결제한 경우 다음 달 말일은 30, 31, 28, 29일 등 윤년 여부와 월에 따라 기간이 다를 수도 있다. 처음에는 해당 로직을 직접 코드로 구현하고 있었다. LocalDateTime으로 저장된 최근 라이선스 만료일자를 바탕으로, Month 값만 가져와서, 다음 달 값을 구하고, 해당 달의 말일을 가져온 다음 결제일을 비교하면서 다음 달 말일에 기간이 포함되는지 여부 등 열심히 지지고 볶고 구현을 하고 있었다. 그..

JohnMark
'Programming/Java' 카테고리의 글 목록