Language/Java 27

[Java] 조건문 if if문은 가장 기본적인 조건문이며, 조건식과 괄호로 이루어져 있습니다. if문에 사용되는 조건식은 일반적으로 비교연산자와 논리연산자로 구성됩니다. 만약 실행할 문장이 하나뿐이라면 괄호를 사용하지 않고 바로 사용할 수 있습니다. if문은 단일로 if만 사용하거나, if-else로 참일 경우와 거짓일 경우에 사용하거나 if-elseif-else로 여러 조건을 필터링 할 수 있습니다. 하지만 여러 조건을 적용하는 경우 if를 사용하는 것 보다 switch-case가 더욱 적합할 수 있습니다. if문 if (조건문) //true일 경우 실행 if (조건문) { //true일 경우 실행 } if-else문 if(조건문) { //true인 경우에 실행 } else { //false인 경우에 실행 } if-el.. Language/Java 2021. 11. 5.
[Java] Arrays 클래스 Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함되어 있습니다. Arrays 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 바로 사용할 수 있습니다. 이 클래스는 java.util 패키지에 포함되므로, 반드시 import 문으로 java.util 패키지를 불러오고 나서 사용해야 합니다. 대표적인 메서드는 asList, copyOf, copyOfRange, equals, fill, sort가 있습니다. Arrays은 원시 타입과 제네릭 타입에 대한 메서드들을 제공합니다. 예제는 간편하게 정수형 배열을 기준으로 작성하겠습니다. copyOf public static int[] copyOf(int[] original, int newLength) { .. Language/Java 2021. 11. 2.
[Java] String과 String Pool String 인스턴스 생성 String은 참조 타입 자료형이지만 new 키워드 이외에 리터럴로 생성이 가능합니다. String str1 = "donghwan"; String str2 = new String("donghwan"); Heap과 String Pool 여느 참조 타입 자료구조와 같이 String도 인스턴스를 생성하게 되면 JVM Heap 영역에 메모리를 할당하고 값이 저장됩니다. 하지만 리터럴로 생성하는 경우와 new 키워드를 통해 생성할 때, 차이가 발생하게 됩니다. 리터럴로 String을 생성하게 되면 Heap 영역에 String Pool이라는 곳에 생성되고 new 키워드를 통해 생성하게 되면 Heap에 별도 메모리 영역에 생성됩니다. String a = "aaa"; String b = "a.. Language/Java 2021. 11. 1.
[Java] String의 불변성( Immutable ) Java에서 String은 불변(Immutable) 객체라고 불립니다. 불변 객체란 객체가 생성된 후 상태가 변하지 않고 계속 유지되는 객체를 말합니다. String 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없습니다. 이제 Java에서 String 왜 불변 객체인지 그리고 그로 인한 장점과 특징이 무엇이 있는지 알아보도록 하겠습니다. 1. String Pool 모든 언어에서 String은 활발하게 사용되는 자료형입니다. 이러한 자료형을 생성하고 삭제하는 것은 많은 자원을 소비하게 됩니다. Java에서는 이러한 현상을 해결하고자 Heap의 String Pool을 활용하여 해결하고 있습니다. String은 참조 타입의 자료형이지만 특이하게도 new 키워드와 리터럴로 모두 생성이 .. Language/Java 2021. 11. 1.
[Java] 동일성과 동등성 ( == vs equals ) Java에서 ==와 equals는 자신의 기준으로 양쪽을 비교하여 boolean의 형태로 결과를 나태내는 역할을 한다는 공통점이 있습니다. 하지만 ==와 equals는 분명한 차이점이 존재합니다. 일단 가장 간단하게 ==는 비교 연산자이고 equals는 메서드입니다. 하지만 가장 중요한 차이점은 동일성과 동등성이라고 볼 수 있습니다. 동일성 동일성은 지금 비교하고 있는 값들이 동일하다는 의미입니다. Java는 실제 값을 저장하는 원시 타입(Primitive Type)과 참조 값을 저장하는 참조 타입(Reference Type)이 있습니다. 이때 원시 타입의 경우는 단순히 값을 비교하여 동일성의 여부를 나타내지만 참조형의 경우 참조 값. 즉, 객체의 주소를 기준으로 동일성을 판단하게 됩니다. ( 하지만 S.. Language/Java 2021. 11. 1.
[Java] orElse vs orElseGet orElse와 orElseGet은 T 타입의 값을 반환한다는 것은 동일합니다. 한마디로 Default 값을 설정하는 함수라고 할 수 있습니다. 하지만 같은 기능으로 동작하지만 파라미터와 동작 방식에서 차이를 보입니다. 시나리오를 부여하여 특정 상황에 걸리는 시간을 기준으로 두 메서드의 차이를 알아보겠습니다. 이번 테스트에는 JMH을 사용해서 걸리는 시간을 확인 해보겠습니다. 테스트 조건은 동일한 워밍업 테스트 5번 후 실제 테스트를 5번 진행하는 방식을 기준으로 작성해보도록 하겠습니다. 1. Optional Value Not Null이 아닐 때, 새로운 인스턴스를 반환하는 경우 orElse @Benchmark public void orElseInitValueExist(Blackhole blackhole).. Language/Java 2021. 10. 29.
[Java] Optional 공식 API 문서에서는 메서드가 반환할 결과값이 ‘없음’을 명백하게 표현할 필요가 있고, null을 반환하면 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용하자는 것이 Optional을 만든 주된 목적입니다. Optional 타입의 변수의 값은 절대 null이어서는 안 되며, 항상 Optional 인스턴스를 가리켜야 한다고 말하고 있습니다. Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)입니다. 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있습니다. 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메서.. Language/Java 2021. 10. 29.
[Java] 연산자 ( Operator ) '연산자'는 연산을 수행하는 기호를 말합니다. 우리가 아는 사칙연산 부호를 비롯해서 다양한 연산자들이 존재합니다. 연산자가 연산을 수행하려면 반드시 연산의 대상인 '피연산자'가 있어야 합니다. 상수, 변수 또는 식(Expression)을 '피연산자'로 사용할 수 있습니다. '연산자'와 '피연산자'를 조합하여 계산하고자 하는 바를 표한 것을 식(Expression)이라고 합니다. '피연산자'의 개수로 연산자를 분류하기도 하는데, '피연산자'의 개수가 하나면 '단항 연산자', 두개면 '이항 연산자', 세개면 '삼항 연산자'라고 불립니다. 대부분은 '이항 연산자'이고 삼항은 ' ? : ' 하나뿐입니다. - 3 - 5 위 처럼 식이 존재하는 경우 두개의 연산자가 포함되어 있는데, 둘 다 같은 기호로 나타내지만 .. Language/Java 2021. 10. 23.
[Java] 변수 (Variable) 하나의 값을 저장할 수 있는 메모리 공간입니다. 여기서 메모리 공간은 RAM을 의미합니다. 메모리 공간을 1Byte 단위로 나누고 0부터 연속적인 번호를 부여하였는데 이것을 메모리 주소라고 합니다. 원래 메모리의 값을 저장하거나 읽을 때 메모리 주소를 이용해야하지만 이 메모리 주소는 숫자로 구성되어 사람이 기억하기 불편합니다. 그래서 특정 메모리 영역에 이름을 부여하고 주소대신 이름을 이용하여 메모리의 값을 저장하거나 읽을 수 있게 해주는게 변수입니다. 변수는 단 하나의 값만 저장할 수 있기때문에 변수에 새로운 값을 저장하게 되면 기존에 있던 값은 사라지고 새로 저장한 값만 남게 됩니다. 변수를 선언하는 것은 값을 저장할 공간을 마련하는 것 입니다. 변수의 선언하는 방법은 변수 타입과 변수 이름으로 선언.. Language/Java 2021. 10. 16.
[Java] SOLID 목적 변경에 유연합니다. 이해하기 쉽습니다. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 됩니다. SRP (Single Responsibility Principle) : 단일 책임 원칙 클래스는 단 한 개의 책임을 가져야 한다는 원칙으로 클래스가 변경되는 이유는 단 한 개여야 한다는 의미입니다. 응집도는 높고 결합도는 낮은 프로그램을 뜻합니다. 설계를 잘한 프로그램은 새로운 요구사항과 프로그램 변경에 영향을 받는 부분이 적습니다. 변경의 이유가 단 하나여야만 한다라는 것은 하나의 모듈은 오직 하나의 액터만 책임져야 한다는 뜻입니다. 그렇다면 '책임'은 무엇일까요? 해당 클래스에 어떤 '액터'들이 의존하게 되는지를 생각해봐야 올바르게 준수 할 수 있습니다. 여기서 '액터'란 시스템이 동일한 .. Language/Java 2021. 9. 29.