Java 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