Java 10

[Java] 함수형 인터페이스, 람다, 메소드 레퍼런스에 대하여

함수형 인터페이스, 람다, 메소드 레퍼런스 모두 긴밀한 연관을 가지고 있는 개념입니다. 이번 글을 통해 해당 개념들을 살펴 보고자 합니다. 함수형 인터페이스 @FunctionalInterface public interface Foo { int add (int a, int b); default void printDate(){ System.out.println(LocalDate.now()); } } 함수형 인터페이스란 추상 메소드를 단 하나 가지고 있는 인터페이스를 의미합니다. default method, static method가 몇개 존재하던 추상 메소드를 단 하나만 가지고 있다면 함수형 인터페이스라고 합니다. Q) 추상 메소드란 ? A) 선언만 되어 있고, 구체적인 구현은 되어있지 않은 메소드입니다. ..

Java 2024.01.15

[Java] final 키워드 그리고 effectively final

final이란? final은 클래스, 메서드, 변수에 사용될 수 있습니다. final 키워드가 붙으면 특정한 무엇인가를 제한한다는 의미를 공통적으로 가지는데, 이 부분에 대해서 알아보도록 하겠습니다. 변수 변수에 final이 붙는다면 이 변수는 수정할 수 없다 라는 의미를 갖습니다. primitive type의 경우 수정 자체가 불가능 하며, reference type 경우 가르키는 객체의 주소를 변경할 수 없습니다. (객체의 내부 값은 영향을 받지 않습니다.) public class Temporary { public static void main(String[] args) { final int int1 = 2; System.out.println("int1 = " + int1); // int1++; //..

Java 2023.06.13

[Java] Exception의 종류 및 처리 방법

들어가기에 앞서 개발을 하다 보면 다음과 같은 문구들을 자주 만나게 됩니다. 개발 공부를 처음 할 때에는 이런 문구들만 보면 갑자기 기분이 좋다가도 싫어지고, 뭔가 무섭고 그랬습니다. 하지만 예외라는 것은 개발자에게 무서운 것이 아닌 개발자에게 문제 상황을 알려주려고 하는 친근한 친구입니다. 이번 장에서는 Java에서 사용하는 예외에 대해서 알아보려고 합니다. Exception 종류 자바는 총 세 종류의 예외가 존재합니다. Error Runtime Exception (Unchecked Exception) Checked Exception [ Error ] Error란 자바 프로그램 밖에서 일어나는 예외를 말합니다. 서버의 디스크가 고장 났다던가, 메인보드가 제대로 동작을 하지 않는다던가와 같이 자바 내에서..

Java 2023.06.12

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

==와 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

다형성 (Polymorphism)

객체 지향의 특징으로 추상화, 캡술화, 상속, 다형성이 있습니다. 그 중 오늘은 다형성에 대해 살펴보도록 하겠습니다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 집단으로 보는 시각에서 벗어나 여러개의 독립된 단위, 객체들의 모임으로 파악하고자 하는 것입니다. 각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있습니다. 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됩니다. 실제 세계와 객체지향이 1:1 로 정확히 매칭되지는 않지만 비유를 위해 비교해보겠습니다. 세상은 역할 과 구현으로 구분을 할 수 있습니다. 자동차를 예로 들자면 위 그림에서 사람은 운전자 역할 이며 자동차는 자동차 역할 입니다. 전기차, 경유, 휘발유는 자동차 역할을 구현한 것입니다. 실..

Java 2023.04.05