Java 21

오버로딩과 오버라이딩에 대해

본문에 들어가기 앞서 오버로딩과 오버라이딩을 한줄 요약한다면 다음과 같습니다. 오버로딩(overloading) : 기존에 없는 새로운 메서드를 정의하는 것 오버라이딩 (overriding) : 상속받은 메서드의 내용을 변경하는 것 오버로딩 (overloading) 자바에서는 한 클래스 내에서 메서드 매개변수의 개수 혹은 타입이 다르다면 이미 존재하는 메서드명을 다시 사용할 수 있습니다. 오버로딩이 성립하기 위해서는 다음의 조건을 만족해야 합니다. 메서드 이름이 같아야 한다. 매개변수의 개수 혹은 타입이 달라야 한다. 메서드의 반환 타입은 영향을 미치지 않는다. [출력 결과] 이름 : tommy 이름 : tommy, age : 2 예시로 Printer 이라는 클래스를 생성했습니다. print method가..

Java 2023.05.01

Java Parameter Passing Mechanism

Definition 함수에 인자를 넘기는 방식에는 다음과 같은 방식이 있습니다. value reference result value-result name 이 중 Pass By Value, Pass By reference 메서드가 널리 사용되고 있습니다. 프로그래밍 언어들 마다 각자의 방법으로 인자들을 넘기는 방법을 택하고 있습니다. Java의 경우 엄격하게 Pass By Value를 지키고 있습니다. 들어가기 앞서 Wikipedia에 정의된 Call By Referecne, Call By Value의 정의를 한번 짚고 넘어가겠습니다. Call By Value Call By Value는 method에서 변수를 사용 시 새 메모리 영역에 복사해 method의 변수에 바인딩합니다. 메서드에서 값을 변경하면 m..

Java 2023.04.26

Java Collection Framework

Java에서 Collection Framework라는 용어를 들어본 적이 있을 것입니다. 많이는 들어봤지만 정리는 잘 안하게 되는 Collection Framework에 대해서 정리를 해보려고 합니다. Collection : 다수군의 데이터를 의미합니다. Framework : 표준화된 프로그래밍 방식을 의미합니다. Collection Framework 는 즉 데이터군을 저장하는 클래스들을 표준화한 설계도 라고 보시면 될 것 같습니다. Collection Framework는 JDK1.2 에 등장하였습니다. JDK 1.2 이전에는 컬렉션 클래스, 다수의 데이터를 저장할 수 있는 클래스들을 서로 다른 방식으로 처리했습니다. Collection Framework 의 등장으로 인해 다양한 종류의 컬렉션 클래스가 ..

Java 2023.04.25

String, StringBuffer, StringBuilder

이번 장에서는 String , StringBuffer 및 StringBuilder에 대해 알아보려고 합니다. String String은 기본적으로 immutable 즉 변경 불가능한 클래스 입니다. 다음 예시와 함께 알아보도록 하겠습니다. {1} String a = "hello"; String b = "world"; //------ {2} a = a + b; System.out.println(a); // "helloworld" {1}의 과정에서는 a는 hello의 주소인 0x100 을 가르키고 b는 world 주소인 0x200을 각각 가르킵니다. {2}의 과정에서는 새로운 문자열 ("helloworld")이 담긴 instance가 생성되고 a는 이전에 가르키고 있던 0x100 주소 대신 0x300을 가르..

Java 2023.04.24

Junit - Parameterized Test (변수 테스트)

테스트 코드를 작성할 때 특정 변수 값에 따른 테스트 코드를 짜야할 경우가 있습니다. 이러한 경우 모든 변수를 직접 하드코딩 하여 작성해도 되지만 매개변수 테스트를 사용하면 간단한 코드로 효율적으로 실행을 할 수 있습니다. Set에 이름을 저장할 때 제대로 저장되었는지 확인하기 위해 테스트코드를 짠다고 가정해보겠습니다. import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import java.util.HashSet; import java...

Java 2023.04.22

Javadoc 이란?

좋은 API 문서는 성공적인 Software Project를 위한 많은 요소들 중 하나입니다. JDK의 최근 버전들은 모두 Javadoc 도구를 제공합니다. 평소 우리가 프로젝트하는 경우에 대해서는 모두 지원을 한다고 보면 될 것 같습니다. [JavaDoc을 사용하기 위한 전제조건] JDK1.4 이상 PATH 환경 변수에 JDK의 /bin 폴더가 추가되어 있는지 확인 IDE (선택사항) [이번 Post에서 사용한 환경] JDK 17 IntelliJ SpringBoot 3.0.4 Gradle 7.6.1 Java 주석 java에서 사용할 수 있는 주석방식은 다음과 같습니다. (1) // single line comment (2) /* * regular multi-line comment */ (3) /** *..

Java 2023.04.22

Java EE 와 Java SE 뭐가 다른가요?

설명에 앞서 줄임말의 풀 네임을 설명 드리고 시작하려고 합니다. Java SE : Java Platform, Standard Edition Java EE : Java Platform, Enterprise Edition 들어가며 Java 언어의 Platform은 총 네가지의 플랫폼이 존재 합니다. Java SE (Standard Edition) Java EE (Enterprise Edition) Java ME (Micro Edition) JAVA FX 모든 자바 플랫폼은 Java 가상 머신인 (JVM) 위에 애플리케이션 프로그래밍 인터페이스(API)로 구성됩니다. JVM 은 Java 기술 응용 프로그램을 실행하는 특정 하드웨어 및 소프트웨어 플랫폼용 프로그램입니다. API는 다른 소프트웨어 구성 요소 혹은..

Java 2023.04.21

==와 equals()는 어떠한 차이점을 가질까?

그동안 Spring을 사용해 개발하면서 == 과 equals()의 큰 차이점을 모르는 채로 equals() 만 사용을 해왔습니다. 이 부분에 대해 정확히 개념을 잡아보려고 합니다. String 변수 생성 String 변수를 생성하는 방식에는 두가지 방식이 있습니다. literal 을 이용한 방식 new 연산자를 이용한 방식 [literal을 이용한 방식] string constant pool 이라는 영역에 존재하게 됩니다. string constant pool 에 주어진 문자열이 있는지 검색합니다. 문자열이 있으면 해당 주소값을 반환 문자열이 없으면 string constant pool에 넣고 새로운 주소값을 반환 [new 연산자를 이용한 방식] Heap 영역에 존재합니다. == 와 equals() ==..

Java 2023.04.21

final vs finally vs finalize

위 세가지 단어들은 서로 다르게 사용되는 단어이지만 복습 차원에서 한번 짚고 넘어가려고 합니다. Final final은 '마지막', '변경 될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 적용 될 수 있습니다. 변수에 사용하면 값을 변경 할 수 없는 상수가 되고, 메서드에 사용하면 오버라이딩을 할 수 없고, 클래스에 사용하면 자손 클래스를 정의 할 수 없습니다. final class Unique{// 조상이 될 수 없는 클래스 final int countRatio = 0.25;// 변경 불가능한 멤버 변수 final int getDiscount(int price){// 오버라이딩 할 수 없는 메서드 int defaultRatio = 0.1;// 변경 불가능한 지역 변수 ... } } 보통 Java..

Java 2023.04.18

좋은 객체 지향 설계의 5가지 원칙

Robert Martin의 클린코드에서 좋은 객체 지향 설계의 원칙을 SOLID로 정의 하였다. S : SRP(Single Responsibility Principle) 단일 책임 원칙 O : OCP(Open/Closed Principle) 개방-폐쇄 원칙 L : LSP(Liskov Substitution Principle) 리스코프 치환 법칙 I : ISP(Interface Segregation Principle) 인터페이스 분리 원칙 D : DIP(Dependency Inversion Principle) 의존관계 역전 원칙 SRP (단일 책임 원칙) 하나의 클래스는 하나의 책임만 가져야 한다. 여기서 책임이란 상황에 따라 다른데 클 수도 있고 작을 수도 있다. 중요한 기준은 변경이다. 변경이 있을 때..

Java 2023.04.05