본문 바로가기

Java

(14)
Singleton 패턴 Singleton 패턴이란 싱글턴 패턴은 객체의 인스턴스가 오로지 한 개만 생성되도록 설계하는 디자인 패턴을 의미한다. 이는 전역적으로 접근할 수 있는 하나의 객체를 제공하는데 유용하다.  이러한 싱글턴 패턴은 다음과 같은 특징을 갖는다. 1. 유일성싱글턴 클래스는 단 하나의 인스턴스만 생성함 여러 번 인스턴스화를 시도해도 항상 같은 인스턴스를 반환함 2. 전역 접근싱글턴 객체는 전역적으로 접근할 수 있는 방법을 제공한다. 이를 통해 어플리케이션의 다른 부분에서 언제든지 동일한 인스턴스에 접근할 수 있다.  Singleton 패턴 구현 방법 자바에서 싱글턴 패턴을 구현하는 방법은 여러가지가 있다. 하지만 여기에서는 권장되는 2가지 방법만 제시할 것이다. (나머지 방법들은 단점이 뚜렷하기 때문) 1. Bi..
SOLID 원칙 SOLID 원칙이란 SOLID 원칙은 객체 지향 프로그래밍과 설계에서 코드의 유지보수성과 확장성을 높이기 위해 제안된 다섯 가지 설계 원칙을 의미한다. 각각의 원칙은 코드의 결합도를 낮추고 응집도를 높이며 코드의 가독성과 재사용성을 높이는 것을 목표로 한다.  1. 단일 책임 원칙 (Single Responsibility Principle, SRP)클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙여기서 책임은 하나의 기능 담당으로 볼 수 있다.즉, 하나의 클래스는 하나의 기능 담당하여 하나의 책임을 수행하는데 집중되도록 클래스를 따로따로 여러 개 설계하라는 원칙 다른 의미로는 클래스가 변경되어야 하는 이유가 단 하나여야 한다는 것을 의미함 사용자의 데이터를 처리하는 로직이 필요하다고 가정하자.사용자 ..
추상 클래스와 인터페이스 추상 클래스란 추상 클래스는 하나 이상의 추상 메소드를 가지고 있는 클래스를 의미한다. 추상 클래스가 가지고 있는 특징은 다음과 같다. 추상 클래스를 선언할 때는 class 앞에 abstract 키워드를 사용한다. 어떠한 클래스가 추상 클래스를 상속하면 추상 클래스에 선언된 추상 메소드를 반드시 구현해야 한다. 추상 클래스는 new 키워드로 인스턴스를 생성할 수 없다. 상속할 때 extends 키워드를 사용하며 다중 상속이 불가능하다. 추상 클래스는 필드를 가질 수 있다. 이러한 필드는 상속받는 자식 클래스에서 사용할 수 있다.  추상 클래스 사용 예시 public abstract class Authenticator { private String authType; public Authentic..
인터페이스(Interface) 인터페이스란 자바에서 인터페이스(interface)란 클래스가 구현해야 하는 메소드의 집합을 정의하는 특수한 타입이다.  이러한 인터페이스를 사용하는 이유는 다음과 같다.추상 메소드를 통해 객체들 간의 네이밍을 통일할 수 있고 이로 인해 소스의 가독성과 유지보수가 향상된다. 확장에는 열려 있고 변경에는 닫혀 있는 객체 간 결합도(코드 종속성)를 낮춘 유연한 방식의 개발이 가능하다.  인터페이스는 클래스가 따라야 할 일종의 계약(규약)을 정의한다. 개발자는 인터페이스에 정의된 메소드를 구현한 클래스를 통해 실제 기능을 제공한다. 인터페이스는 메서드 이름, 매개변수 타입, 리턴 타입만 정의하고, 구현은 이를 구현하는 클래스에서 제공한다. 인터페이스를 구현한 클래스는 반드시 인터페이스에서 정의된 모든 메서드를..
상속(Inheritance) 상속이란  자바에서 상속(Inheritance)은 하나의 클래스가 다른 클래스의 속성과 메소드를 물려받아 재사용하는 방식을 의미한다. 상속 방식은 주로 다단계 상속, 계층적 상속 두 가지 방식을 띄게 되는데 부모 클래스를 통해 자식, 손자까지 내려가는 방식을 다단계 상속이라고 하며 하나의 부모가 여러 개의 자식을 가지는 것을 계층적 상속이라고 한다.  자바에서 다중 상속은 불가능 하다.  자바 클래스가 다중 상속이 불가능한 이유는 다음과 같다.1. A라는 class에 test()라는 메소드가 있음2. B라는 class에 test()라는 메소드가 있음3. C라는 class가 A와 B 클래스를 모두 상속받음4. C에서 부모 클래스의 test() 메소드 호출  - 이러면 어느 부모의 test() 메소드를 호출..
동일성(identity)과 동등성(equality) 동일성과 동등성의 원활한 설명을 위해 아래와 같은 클래스가 있다고 가정한다. class User { private int userId; private String email; public User(int userId, String email) { this.userId = userId; this.email = email; }}  동일성(identity) 이란 동일성은 두 객체가 동일한 메모리 주소를 가리키는지를 의미한다. Java에서는 == 연산자를 사용하여 동일성을 비교한다.User user1 = new User(1, “test@test.com”);User user2 = user1;System.out.println(user1 == user2); // out..
깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) 얕은 복사(Shallow Copy) 란 다음과 같은 Java 코드를 보자int[] arr1 = {1,2,3};int[] arr2 = arr1; arr2[0] = 10;System.out.println(arr1[0]); // output : 10System.out.println(arr2[0]); // output : 10arr1[1] = 9;System.out.println(arr1[1]); // output : 9System.out.println(arr2[1]); // output : 9 위 코드에서는 분명 arr2의 0번째 데이터를 10으로 변경했는데 arr2만 아니라 arr1의 0번째 데이터도 10으로 변경된 것을 볼 수 있다. 또한 arr1의 1번째 데이터를 9로 변경했는데 arr2의 1번..
String / StringBuilder / StringBuffer 이번 포스트를 보기 앞서 이전 포스트를 보고 오시기 바랍니다.https://jaystorage.tistory.com/20 String과 String Constant Pool들어가기 앞서 String을 보다 자세히 이해하기 위해서는 JVM 구조를 알고 있는 것이 좋다. JVM에 대한 자세한 내용을 알고 싶다면 https://jaystorage.tistory.com/8 을 참고하자 String 이란 Java에서 String은 문jaystorage.tistory.com  String 과 StringBuilder, StringBuffer 의 차이점 String과 (StringBuilder, StringBuffer)는 문자열을 다루는 클래스라는 점에서 공통점을 가지고 있지만 String은 불변성(immutable..