꾸준한 스터디
article thumbnail
정규표현식 (Regular Expression)
Effective Java/키워드 2023. 1. 6. 01:16

프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어를 말한다. 정규식이라고도 부르며,보통 regex 혹은 regexp라 많이 쓴다. - 나무위키 어플리케이션에서 보통 이용자가 데이터를 입력할 때 제대로 된 값을 입력했는지 검증하는 용도로 쓰인다. 이메일 형식, 전화번호, 비밀번호 형식 등등 데이터베이스에 쌓는 자료가 의미있고 일관성이 있게 프로그래밍을 해야한다. 자주 사용하는 정규 표현식 숫자 : ^[0-9]*$ 영문 대소문자 : ^[a-zA-Z]*$ 한글 : ^[가-힣]*$ 이메일 : ^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ 전화번호 : ^\d{2,3}-\d{3,4}-\d{4}$ 자바에서 정규표현식을 사용할 때 주로 사용하..

의존 객체 주입 패턴 (Dependency Injection Pattern)
Effective Java/키워드 2023. 1. 6. 00:34

의존성 주입 객체가 서로 의존하는 관계가 되도록 의존성을 주입하는 것. 객체지향에서 의존성이란 하나의 객체가 어떠한 다른 객체를 사용하고 있음을 의미한다. 의존 객체 주입 패턴을 사용하는 이유는 1:1의 강한 커플링 관계(결합도가 높은)를 루즈 커플링 관계(느슨한 결합)가 되도록 구현하는 것이다. 강한 커플링 관계를 맺게 되면 모듈간 분리가 어렵고 코드 재사용성이 떨어진다. 유지보수가 어렵다. 그렇다고 아얘 관계를 맺지 않으면 사용할 수 없으니 느슨한 관계를 맺게 만들어주어야 한다. 대표적으로 Spring 프레임워크에서 IOC 컨테이너가 이 역할을 하는데 기존 개발자가 객체를 결정 하고 생성 -> 의존성 객체 생성 -> 객체 내 메소드 호출로 모든 작업을 사용자가 제어하는 구조였다면 IOC컨테이너가 처리..

article thumbnail
정적 유틸리티 클래스 (Static Utility Class)
Effective Java/키워드 2023. 1. 6. 00:32

static method와 static field 만을 담은 클래스. 보통 유틸성 클래스로 helper의 성격을 갖는 클래스. 이런 클래스들은 클래스 메서드와 클래스 인스턴스이니 객체 인스턴스가 필요없는 클래스여서 private로 생성자를 선언함으로 외부 클래스에서 인스턴스화를 못하게 막아준다. 종종 유틸리티 클래스에서 abstract 클래스로 만들고 기본 생성자 선언을 안한 클래스들이 보이는데 이는 직접적으로 해당 유틸리티 클래스를 인스턴스로 만들지는 못하지만 상속을 받은 하위 클래스에서는 인스턴스로 만들어져 인스턴스 메서드, 필드로 접근할 수 있게된다. 그러므로 기본생성자를 private로 생성하여 아얘 생성을 못하게 막아주는 것이 좋다. private 생성자를 선언했을 경우 외부 클래스에서 접근할 ..

직렬화 역직렬화 (Siriallizable Desirializable)
Effective Java/키워드 2023. 1. 4. 18:23

직렬화 데이터 직렬화란 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것. 직렬화를 하는 이유는 사용하고 있는 데이터를 파일 저장 혹은 데이터 통신에서 파싱할 수 있는 유의미한 데이터를 만들기 위함 자바 직렬화는 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터 변환하는 기술. JVM의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술. 역직렬화 데이터 역 직렬화란 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것. 바이트로 변환된 데이터를 다시 객체로 변환하는 기술. 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로..

공변 반환 타입 (Covariant Return Type)
Effective Java/키워드 2023. 1. 4. 18:22

부모클래스 메서드를 자식클래스에서 오버라이딩 시 메서드 시그니쳐에 이름, 매개변수, 반환타입이 같아야 하는데 java 1.5부터 is-a 관계인 경우 메서드 반환타입이 부모클래스의 자식클래스로 변경할 수 있다. public class Test { public static void main(String[] args) { Animal animal = new Animal(); Dog dog = new Dog(); // Dog is a Animal 묵시적 형변환 Animal aniDog = new Dog(); System.out.println(animal.create().getClass()); // Animal System.out.println(dog.create().getClass()); // Dog Syst..

열거 타입 (Enum)
Effective Java/키워드 2023. 1. 4. 18:15

변하지 않는 상수의 집합 클래스 보통 성별이나, 월, 요일 같은 경우 변하지 않는 데이터들을 전역변수 처럼 1개의 인스턴스로 사용하기도 하는데 public class Month { public static final String MAY = "5월"; } public class App { public static void main(String[] args){ System.out.println(Month.MAY); } } 클래스 변수로 선언을 하면 외부 패키지에서도 전역변수처럼 사용했지만 enum 클래스로 더 편리하게 관리할 수 있다. enum 클래스는 메모리 메소드 영역에 올라가면 클래스로더가 클래스를 파싱하면서 각 상수가 싱글톤으로 힙 영역에 생성 된다. public enum Month{ // 각 상수는..

싱글턴 (Singleton)
Effective Java/키워드 2023. 1. 4. 18:14

오직 하나의 객체만을 생성할 수 있는 클래스. 객체의 유일성 보장한다. 어플리케이션이 시작될 때 최초 한 번만 메모리를 할당하고 그 메모리에 캐시된 인스턴스를 만들어 사용한다. 싱글톤은 생성 패턴(Creational Pattern) 중 하나이다. 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴입니다. 생성 패턴에 속하는 패턴들은 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줍니다. 생성 패턴은 시스템이 상속(inheritance) 보다 복합(composite) 방법을 사용하는 방향으로 진화되어 가면서 더 중요해지고 있습니다. 생성 패턴에서는 중요한 이슈가 두 가지 있습니다. 생성 패턴은 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화합니다. 생성 패턴..

article thumbnail
불변 클래스 (Immutable Class)
Effective Java/키워드 2023. 1. 4. 18:13

불변은 변하지 않는 뜻을 가지고 있다. Immutable Class는 객체를 만들게 되면 상태값을 변경할 수 없는 클래스이다. 클래스 시그너쳐에 final 키워드를 사용하여 다른 클래스에서 상속받지 못하게 하여 하위 클래스에서 메서드 오버라이딩이 안되게 막고 필드도 final 키워드로 선언하여 객체 생성하여 인스턴스화 -> 초기값 세팅이 되면 더 이상 수정할 수 없게된다. String 클래스 역시 불변 객체로 한 번 할당된 문자열은 변경할 수 없다. 하지만 같은 문자열을 literal 형식으로 생성하면 String Constant Pool(Fly Weight Pool)에 담겨 같은 곳을 참조해 메모리 낭비를 줄이는 방식을 사용한다. public class StringTest { public static ..