프로그래밍/JAVA 24

ArrayList와 LinkedList

ArrayList Arraylist의 기본 크기는 10이다 private static final int DEFAULT_CAPACITY = 10; 시간 복잡도 및 특징 Add - O(1) Remove - O(n) Get - O(1) 임시 배열을 생성해서 복사하여 추가, 삭제를 함 검색이 빠름 LinkedList 시간 복잡도 및 특징 Add - O(1) Remove - O(1) Get - O(n) 데이터 추가 / 삭제가 빠름 검색이 느림 기본 활용 추가 add() 변경 set() 값 확인 get() 제거 remove() 크기 확인 size() LinkedList에는 addFirst(), addLast(), removeFirst(), removeLast() 등이 더 있다. import java.util.Arr..

자바 replaceAll 정규식 특수문자 제거

대괄호를 써야하는 특수 기호 $ -> [$] * -> [*] + -> [+] | -> [|] \\를 써줘야하는 기호들 ( -> \\( ) ->\\) { -> \\{ } -> \\} ^ -> \\^ [ -> \\[ ] -> \\] \를 써줘야하는 기호 " -> \" 물음표 ? 제거 a.replaceAll("[?]", ""); a.replaceAll("\\?", ""); public class ExRegularExpression { public static void main(String[] args) { String a = "!@#$%^&*()_+{}[];':\"|,./?"; String a2 = "?!@#$%^&*()_+{}[];':\"|,./?@#*{}||}{}[]][$)@#_@+_$+!*@#!+$+#+..

Date와 Time

기존 java.util.Date 클래스 1. mutable하기 때문에 thread safe하지 않았다. 2. month가 0부터 시작한다. 3. Date 타입인데 시간까지 다룬다. public class ExDateTime { public static void main(String[] args) throws InterruptedException { //과거 Date Date date = new Date(); //Date인데 시간까지 다룬다 - 클래스이름이 명확하지 않다 long time = date.getTime(); System.out.println(date); System.out.println(time); Thread.sleep(1000*2); Date after2Seconds = new Date()..

의존성과 의존성 주입(DI)

지금까지 공부하면서 이해한 다형성에 대한 설명이다. 추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다. 의존성 어떤 클래스가 다른 클래스의 기능이나 구성요소을 사용하는 것이다. (객체 생성, 메서드 호출 등등) 아래 코드에서는 UserService가 Repository(인터페이스)와 MemoryRepository(클래스)에 의존하고 있다. interface Repository { } class MemoryRepository implements Repository{ } class UserService { private final Repository repository = new MemoryRepository(); } 의존성 주입 직접 의존성을 만들지 않고 외부에서 의존성을 가져..

1차 배열 2차 배열 sort(오름차순, 내림차순)

1차 배열 오름차순 정렬 Arrays.sort를 사용하면 간단하게 정렬할 수 있다. //1차원 배열 오름차순 sort int[] nums = {9,8,1,3,2}; Arrays.sort(nums); for(int i : nums){ System.out.println(i); } 결과 1 2 3 8 9 1차 배열 내림차순 정렬 Collections.reverseOrder()를 사용하기 위해서는 Integer 타입이여야 한다. //1차원 배열 내림차순 sort Integer[] nums2 = {9,8,1,3,2}; Arrays.sort(nums2, Collections.reverseOrder()); for(int i : nums2){ System.out.println(i); } //1차원 배열 내림차순 sor..

Enum(열거형)

지금까지 공부하면서 이해한 다형성에 대한 설명이다. 추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다. Enum은 서로 연관된 상수들의 집합이다. 자바 1.5번전부터 새롭게 추가된 것으로, 상수를 정의할 때 final static String 과 같이 정의할 때 문제를 해결해 준다. 장점으로는 1. 코드가 단순해 진다. 2. 인스턴스 생성과 상속을 방지한다. 3. 의도가 열거임을 분명이 알 수 있다. public class ExEnum { public static final String JANUARY = "1"; public static final String FEBRUARY = "2"; public static final String MARCH = "3"; public st..

추상화 이해

지금까지 공부하면서 이해한 다형성에 대한 설명이다. 추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다. 추상화(Abstraction) 데이터나 프로세스 등을 의미가 비슷한 개념(공통의 속성이나 기능)이나 의미 있는 표현으로 정의(묶는 것)하는 과정 모델링, 코드의 재사용성, 코드의 가독성, 일관된 방향성 --예제 추가 작성 필요

객체 지향 5대 원칙 (SOLID 원칙)

지금까지 공부하면서 이해한 다형성에 대한 설명이다. 추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다. 객체 지향 5대 원칙 - 로버트 마틴 1. SRP(Single Responsibility Principle) 단일 책임의 원칙 하나의 클래스는 하나의 기능을 가져야 한다. 책임 범위를 잘 조절해서 설계해야하는데 쉽지 않다. 2. OCP(Open Close Principle) 개방폐쇄의 원칙 소프트웨어 구성 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 가장 중요한 원칙(객체지향의 장점) 다형성을 활용하자. 3. LSP(Liskov Substitution Principle) 리스코브 치환의 원칙 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인..

캡슐화 이해

지금까지 공부하면서 이해한 다형성에 대한 설명이다. 추가로 배우거나 다른 방식으로 이해를 하게될 수 있으므로 계속 수정할 예정이다. 갭슐화 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶는 것 내부의 동작방법을 숨기고 사용자에게는 사용방법만 노출하는 것 캡슐화는 정보은닉을 포함 캡슐화를 사용하는 이유 외부에 영향 없이 객체 내부 구현 변경이 가능 --예제 구현해보기