Backend/☕️ Java(32)
-
[Java] String 비교 방법 (equals, == 연산자, compare)
신입 수습기간에 자바를 거의 모른채로 spring 프로젝트를 진행한 적이 있습니다. 당시 아래 예시처럼 string 객체를 생성해놓고 문자열을 비교했는데, 의도한 결과와 다른 값이 나와 온통 println() 투성이인 코드를 짠 기억이 납니다. 이제는 말할 수 있습니다 둘의 차이를! String strAA = new String("AA"); if (strAA == "AA") { System.out.println("its same"); } else { System.out.println("using '==' , its not same"); // 해당 라인 출력 } if (strAA.equals("AA")) { System.out.println("using equals(), now its same"); // ..
2021.11.17 -
[Java] 자바 쇼트 서킷 (short-circuit)
들어가기에 앞서, && 와 & 의 차이를 구분할 수 있는가? 이 둘은 같은 기능을 수행하는가? 마찬가치로 || 와 | 에서도 위의 질문을 적용해보자. 본 포스팅에서는 위의 질문을 베이스로 자바 쇼트서킷을 풀어보겠다. 자바 쇼트 서킷 쇼트 서킷이란, 논리연산자 AND, OR 을 나타내기 위해 부호 &&, || 을 사용하는 것을 의미한다. &&, || 와 &, | 를 비교할 때, 둘은 최종적으로 같은 결과를 내지만 다른 과정을 거친다. & , | : 연산자의 앞 조건식과 뒤 조건식을 둘 다 실행 시킨다. && , || : 연산자의 앞 조건식의 결과에 따라 뒤 조건식의 실행 여부를 결정한다. 이러한 논리연산자를 특별히 『쇼트-서킷』이라 한다. 쇼트 서킷에서는 && 앞의 boolean 값이 false 일 때, ..
2021.11.17 -
[Java] 자바의 다중상속 (feat. 인터페이스와 추상클래스)
알고 시작해야 할 내용 1. 자바에서 클래스의 다중 상속은 불가능하다. 2. 하지만 인터페이스의 다중 상속은 가능하다. why? 인터페이스와 추상클래스를 공부하던 중, 자바의 다중상속 이란 개념을 알게 됐다. 어떤 이유에서 인터페이스는 다중 상속이 가능하고, 클래스(+추상 클래스) 는 불가능한지 이유를 풀어보겠다. 인터페이스와 추상 클래스를 사용하는 이유 설계시 인터페이스와 추상클래스를 미리 선언해두면 개발시 기능 구현에만 집중할 수 있다. 즉 개발자는 비즈니스 로직에만 집중할 수 있게 된다. 공통의 인터페이스와 추상 클래스를 선언해두면, 선언과 구현을 구분할 수 있다. 그럼 인터페이스만 있으면 되지, 추상 클래스는 왜 필요하지? 인터페이스를 선언하다보니 어떤 메소드는 미리 선언 해놓을 필요가 있다. 그..
2021.11.16 -
[java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가
목차 JVM이란 무엇인가 컴파일 및 실행 방법 바이트코드란 무엇인가 JVM 구성 요소 JIT 컴파일러와 동작방법 JDK와 JRE의 차이 JVM 이란? 1. JVM(Java Virtual Machine)은 자바 프로젝트를 실행하기 위한 자바 가상머신이다. 2. 이 가상머신은 자바와 운영체제 사이 중계자 역할을 하며, 자바가 OS에 상관없이 실행되도록 한다. - 여기서 말하는 OS 란, 우리가 흔히 아는 windows, macOS 등에 해당된다. JVM 은 어떤 OS 에서도 문제없이 java 프로그램이 실행되도록 도와주는 중간 단계 역할을 맡는다. 3. 개발자가 작성한 자바 소스코드는 우선 컴파일러에 의해 바이트 코드로 컴파일 된 후, JVM 에 의해 해당 OS 가 이해할 수 있도록 기계어로 바꿔 실행된다...
2021.11.11 -
[Java] Call by value, Call by reference (feat. new 연산자)
Call by value / reference를 이햐하기 전에 아래의 코드를 먼저 살펴 봅시다. 아래는 두 변수 값을 swap() 하는 예시 코드입니다. class CallByValue package callby; public class CallByValue { public static void swap(int x, int y) { int temp = x; x = y; y = temp; } public static void main(String[] args) { int a = 10; int b = 20; System.out.println("swap() 호출 전: a = " + a + " b = " + b); swap(a, b); System.out.println("swap() 호출 후: a = " + a..
2021.04.25 -
Elasticsearch nested 쿼리, 자바에서 사용하기
postman이나, elasticsearch head에서 아래와 같은 중첩 쿼리를 사용하면 곧바로 원하는 결과를 얻을 수(조회) 있습니다. Java-spring framework에서 중첩 쿼리의 데이터 조회는 QueryBuilder 클래스의 nestedQuery메서드를 통해 가능합니다. Spring 에서 중첩쿼리를 이용한 데이터 조회 방법을 바로 알아보겠습니다. license라는 중첩 필드 중 test_type이 '정보처리기사'인 데이터를 조회할 수 있는 자바코드를 생성하겠습니다. 자바 코드입니다. propertyValues 객체에, license.test_type 을 key 값으로, 찾고자 하는 값인 '정보처리기사'를 value 값으로 넣었습니다. 이것이 하나의 조회 조건이 됩니다. 즉, nestedQ..
2021.01.24 -
자바 람다식, lambda expression
람다식 도입 배경 (문제점) 자바는 메서드를 매개변수로 전달하지 못한다. 메서드를 매개변수로 전달하기 위해선 인스턴스 생성 후(인스턴스화)에 해당 메서드를 호출해야 하는 식이었다. 인터페이스가 가진 메소드를 즉흥적(인스턴스화를 거치지 않고)으로 사용하는 것이 목적 (해결책) 메서드를 매개변수로 전달하기 위해 자바8에서 도입된 기능이 람다식이다. 인스턴스화를 거친 후에 메소드를 전달할 수 있는 불편한 점을 람다식으로 해결한다. 람다 표현식 // 람다 표현식 (매개변수 목록) -> { 실행문 } 예시 1) 동일한 패키지 내에서 Car, CarExam 클래스 파일 생성 Car.java package lambda; public class Car { public String name; public int capa..
2020.11.25 -
자바 제너릭 Generic
아래 예시를 보며 generic이 왜 필요한지 느껴보자 feel it Human class public class Human{ private Object height; public void setHeight(Object height){ this.height = height; } public Object getHeight(){ return height; } } 1. Object라는 클래스형의 height라는 필드를 생성 2. height에는 값 할당 가능 3. get 메소드(getHeight) 는 값을 꺼내는 것이기에 리턴 타입 필요 -> public Object getHeight() Main method public class Humanbeing { public static void main(String..
2020.11.25 -
다양한 의존객체 주입 (constructor-arg, property)
다양한 의존 객체 주입 방법 bean 객체 내에 의존객체를 주입하는 대표적인 방법은 생성자(constructor) 주입 기본자료형(property) 주입 리스트 주입 해쉬맵 주입 4가지가 있습니다. 그중에서 constructor-args와 property의 차이점을 알아보겠습니다. 1. Constructor-args: 생성자 - 우선 의존 주입이란 뜻은, 1) 의존성 있는 객체를 2) 외부에서 주입 한다는 뜻입니다. - 여기서 의존성 있는 객체는 StudentDao, 외부에서 주입은 constructor-arg를 통해 이뤄집니다. - 아래 코드는, StudentRegisterService bean객체에 studentDao라는 객체를 주입한 것입니다. - 즉, StudentRegisterService 클래..
2020.11.19