일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- 포트앤어댑터 아키텍처
- DP
- java
- springboot
- 데이터 flow
- 비트마스크
- pandas
- 이펙티브 자바
- spring security
- 헥사고날 아키텍처
- series
- dataframe
- dfs
- JPA
- BFS
- 문자열
- docker
- UML
- equals
- 자바
- disjoint set
- 위상정렬
- 알고리즘
- Redis
- ddd
- 스프링
- 다익스트라
- 파이썬
- 세그먼트 트리
- Today
- Total
목록개발 (95)
코딩못하는사람
스프링 빈(Spring Bean)이란? 스프링 IoC(Inversion of Control) 컨테이너에 의해서 관리되고 애플리케이션의 핵심을 이루는 객체들을 스프링 빈(Beans)이라고 한다. 빈은 스프링 컨테이너에 의해서 인스턴스화 되어 조립되고 관리됩니다. 스프링 컨테이너가 관리해준다는 점을 제외하면 자바 객체이다. Singleton 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. 코드에서 private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. 하지만 스프링 컨테이너를 사용하면 컨테이너에 등록되는 빈들을 알아서 싱글톤으로 관리해준다. (클라이언트들이 스프링 빈을 요구할 때..
Enum(열거형) 이란? 서로 연관이 있는 상수들을 묶어 놓은 집합이다. 우리가 자바에서 상수를 정의할 때 final static 을 이용해서 정의하던 문제점들을 보완할 수 있다. Enum의 장점 코드가 단순해지고 가독성이 좋아 구현 의도를 파악하기 쉽다. 인스턴스 생성,상속을 방지하여 상수의 타입안정성이 보장된다. 허용 가능한 값들을 제한할 수 있다. IDE의 적극적인 지원을 받을 수 있다.(자동완성,오타검증,텍스트 리펙토링 등등) 리펙토링시 변경 범위가 최소화된다.(Enum 코드만 고치면 됨) Enum을 사용함으로써 얻는 장점 gender1 = EnumExample.MALE; gender1 = EnumExample.FEMALE; 를 선언한 부분까지는 문제가 없어보이나 gender1='boy' 라는 값..
www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 1.접근 각 알파벳에 자리수를 곱해서 가장 큰 값부터 9를 할당해서 문제를 푸는 그리디 문제이다 2.풀이 알파벳을 한줄 씩 입력받을 때 마다 자릿 수를 곱해서 Map에 저장한다. 예를들면 ABC는 A에 100, B에 10, C에 1을 더하는 것이다. 이렇게 map을 만들고 value값이 가장 큰 순으로 정렬해서 9부터 1씩 줄여가며 곱해서 답을 출력한다. 3.코드 4.배운점 (1)Map에서 value값에 ..
HashSet,HashMap,Hashtable 자료구조를 이해하려면 hashCode를 이해하고 있어야 해서 정리했다. 객체를 비교할 때 동일성 비교 == 연산자: ==연산자는 두 객체의 주소가 같은지를 비교해서 같으면 true 다르다면 false를 반환한다(primitive타입은 값을 통해서 비교한다). 동등성 비교 equals() 메서드: equals는 Object의 기본 메서드로 객체 내부의 값을 비교해준다. 우리가 자주 사용하는 클래스들은 equals를 따로 override해서 동등성 비교를 각 데이터들에 맞게 설정해주었다. 예를 들어 String은 리터럴 방식으로 선언하나 new String 객체로 생성하나 문자열 값만 같으면 equals를 true로 반환하게 만들어 주었고, Integer은 in..
Array,ArrayList의 구조와 차이점등이 궁금해서 정리해보려고 한다. 배열(Array) 여러 데이터를 하나의 이름으로 묶어서 관리하게 해주는 자료구조. index와 값으로 구성되어 있다. 배열에서 index는 어떤 값인지 알려주는 유일무이한 식별자이다. (list에서는 index가 몇번째에 있는지 데이터인지 알려주는 척도) 연속된 메모리에 저장되어 있고 배열을 정의하면 길이를 바꿀 수 없다. 또한 배열은 정적이므로 엘리먼트가 삭제되면 빈공간으로 두게 된다. 장점: 인덱스를 통한 검색이 빠르다, 연속적이므로 메모리 관리가 편하다. 단점: 삭제된 공간을 빈공간으로 두기 때문에 메모리 낭비가 있다,크기를 바꾸지 못한다. Collections 프레임워크 Array로만 모든 데이터를 다루게 되면 비효율적인..
mutable한 객체들을 deepcopy하지 않고 사용하다가 코드를 짤 때 실수한 경험이 많다. 그래서 이번에 확실히 정리했다. DeepCopy (깊은 복사) 일반적인 객체 deepcopy Object클래스의 clone()메서드를 사용하면 객체를 deepcopy해줄 수 있다. 따라서 객체들이 Object 클래스의 clone()메서드를 가지고 있다면 쉽게 깊은 복사를 할 수 있다. 예를들어 Array의 API를 보자. public final class Array extends Object 라고 되어 있다. 따라서 clone을 사용하면 쉽게 deepcopy를 할 수 있다.(primitive 타입 배열일때) 내가 만든 클래스 인스턴스의 deepcopy 내가 만든 class의 deepcopy를 하려면 Clone..
자바의 객체의 타입에는 Immutable 타입과 mutable타입이 있다. 객체들은 기본적으로 heap영역에 할당되고 stack영역에 래퍼런스 값을 갖는 참조 변수들로 접근 가능하다. immutable(불변) 객체 이름에서 알 수 있듯이 변경 불가능,바뀌지 않는 객체이다. immutable 객체의 종류에는 대표적으로 String, Boolean, Integer, Float, Long 등이 있다. (객체이므로 String을 제외하면 primitive의 래퍼타입이다). 이제 immutable 객체의 불변이라는 개념을 자세히 보자. new 연산자로 객체를 생성하면 heap영역에 객체가 생기고 래퍼런스 값을 가지는 변수가 stack에 생길 것이다. 불변 객체라는 것은 이 객체의 값을 heap 영역에서 바꿀 수 ..
Java Virtual Machine(JVM)이란? java와 운영체제(OS) 사이에서 중계자 역할을 해준다. 자바가 운영체제 종류,플랫폼에 관계없이 독립적으로 실행 가능하도록 해준다. 메모리 관리를 GC를 통해서 자동으로 해준다. 왜 JVM 메모리 구조를 알아야 할까? 메모리 설계가 잘되어 있는 프로그램에 비해 메모리 고려가 되지 않은 프로그램은 속도 저하 현상이나 튕김 등의 현상이 일어날 확률이 크다. 결과적으로, 같은 기능의 프로그램이라 하여도 메모리의 관리에 따라 성능이 차이가 나게 된다. 따라서 메모리 구조를 파악하고 한정된 메모리를 효율적으로 사용해야 한다. 자바 실행 과정 -Java Compiler: Java source(.java)파일을 바이트 코드로 바꿔 .class파일로 만들어 준다. ..
자바에서의 배열 정렬은 크게 3가지로 나눈다. 오름차순or 내림차순// 기본타입 or String타입이냐 //객체 배열이냐 1. 오름차순으로 배열하기. 1-1 기본타입 배열 오름차순으로 배열에는 java.util패키지의 Arrays클래스를 사용하면 된다. int [] a=new int []{4,3,2,1}로 선언했다고 하면. Arrays.sort(a)를 해주면 a배열 자체를 정렬된 배열로 바꿔준다. >>[1,2,3,4] 2-1 String타입 배열 String타입은 기본타입은 아니지만 오름차순에서는 같은 방법으로 쓰인다. 아스키코드의 순서에 따라 배열 해준다. String [] s=new String []{"bb","cc","aa"} 위와 같이 Arrays.sort(s)를 해주면 [aa, bb, cc]으..
StringBuilder란. API를 살펴보면 첫줄에 A mutable sequence of characters 라고 써있다. String은 immutable 한 객체로 값을 수정하면 새로운 객체를 만들어 내서 메모리를 잡아먹고 시간도 잡아먹게된다. 하지만 StringBuilder를 사용하게 되면 mutable한 sequence를 수정하는 것이므로 같은 주소에 값만 수정되는 개념이 되게되서 훨씬 빠르게 작동하게 되는 것이다. (메모장에 써 넣어 놓는다고 생각이 든다) 예를 들어 for문 10000번을 돌면서 10000줄의 문자열을 출력해야한다고 하면 System.out.println("정답")은 만번의 String을 선언하고 메모리를 잡아먹게 되지만 매번 StringBuilder에 sb.append("정..