일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문자열
- 파이썬
- Redis
- 자바
- 포트앤어댑터 아키텍처
- 이펙티브 자바
- springboot
- pandas
- dataframe
- series
- 세그먼트 트리
- 데이터 flow
- docker
- 다익스트라
- BFS
- 백준
- ddd
- 알고리즘
- disjoint set
- DP
- UML
- spring security
- JPA
- 헥사고날 아키텍처
- equals
- java
- 비트마스크
- 위상정렬
- 스프링
- dfs
- Today
- Total
목록자바 메모장/개념 및 문법 (11)
코딩못하는사람
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TcrYP/btrrdnasmwT/cCCMl7eAfPZepdkTIvT0n0/img.png)
HashMap은 key의 중복을 허용하지 않고 key-value를 1:1로 매핑하는 자료구조이다. hash의 제공해주는중 장점으로는 빠른 탐색,삽입,삭제에도 있지만 해시 충돌이라는 문제를 꼭 생각해봐야 한다. 해쉬 충돌 동일하지 않은 어떤 객체 X와 Y가 있을 때, 즉 X.equals(Y)가 '거짓'일 때 X.hashCode() != Y.hashCode()가 같지 않다면, 이때 사용하는 해시 함수는 완전한 해시 함수(perfect hash functions)라고 한다. Integer, Long, Double 같은 Number 객체는 객체가 나타내려는 값 자체를 해시 값으로 사용할 수 있기 때문에 완전한 해시 함수 대상으로 삼을 수 있다. 하지만 String이나 POJO(plain old java obje..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b7ePAj/btqYKapNQ9t/rPKnJL9qJk2JsausCnHZN1/img.png)
Enum(열거형) 이란? 서로 연관이 있는 상수들을 묶어 놓은 집합이다. 우리가 자바에서 상수를 정의할 때 final static 을 이용해서 정의하던 문제점들을 보완할 수 있다. Enum의 장점 코드가 단순해지고 가독성이 좋아 구현 의도를 파악하기 쉽다. 인스턴스 생성,상속을 방지하여 상수의 타입안정성이 보장된다. 허용 가능한 값들을 제한할 수 있다. IDE의 적극적인 지원을 받을 수 있다.(자동완성,오타검증,텍스트 리펙토링 등등) 리펙토링시 변경 범위가 최소화된다.(Enum 코드만 고치면 됨) Enum을 사용함으로써 얻는 장점 gender1 = EnumExample.MALE; gender1 = EnumExample.FEMALE; 를 선언한 부분까지는 문제가 없어보이나 gender1='boy' 라는 값..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dop8cY/btqW4gL1WQy/u8KuWHocNskmLcwHC77Esk/img.png)
HashSet,HashMap,Hashtable 자료구조를 이해하려면 hashCode를 이해하고 있어야 해서 정리했다. 객체를 비교할 때 동일성 비교 == 연산자: ==연산자는 두 객체의 주소가 같은지를 비교해서 같으면 true 다르다면 false를 반환한다(primitive타입은 값을 통해서 비교한다). 동등성 비교 equals() 메서드: equals는 Object의 기본 메서드로 객체 내부의 값을 비교해준다. 우리가 자주 사용하는 클래스들은 equals를 따로 override해서 동등성 비교를 각 데이터들에 맞게 설정해주었다. 예를 들어 String은 리터럴 방식으로 선언하나 new String 객체로 생성하나 문자열 값만 같으면 equals를 true로 반환하게 만들어 주었고, Integer은 in..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/niuuZ/btqWUpKuPot/lHSx7gEPxaswHJvkYanHKk/img.png)
Array,ArrayList의 구조와 차이점등이 궁금해서 정리해보려고 한다. 배열(Array) 여러 데이터를 하나의 이름으로 묶어서 관리하게 해주는 자료구조. index와 값으로 구성되어 있다. 배열에서 index는 어떤 값인지 알려주는 유일무이한 식별자이다. (list에서는 index가 몇번째에 있는지 데이터인지 알려주는 척도) 연속된 메모리에 저장되어 있고 배열을 정의하면 길이를 바꿀 수 없다. 또한 배열은 정적이므로 엘리먼트가 삭제되면 빈공간으로 두게 된다. 장점: 인덱스를 통한 검색이 빠르다, 연속적이므로 메모리 관리가 편하다. 단점: 삭제된 공간을 빈공간으로 두기 때문에 메모리 낭비가 있다,크기를 바꾸지 못한다. Collections 프레임워크 Array로만 모든 데이터를 다루게 되면 비효율적인..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cmC9T3/btqWNcdLdYb/hc9IugRmP3z0nNCr350LIk/img.png)
mutable한 객체들을 deepcopy하지 않고 사용하다가 코드를 짤 때 실수한 경험이 많다. 그래서 이번에 확실히 정리했다. DeepCopy (깊은 복사) 일반적인 객체 deepcopy Object클래스의 clone()메서드를 사용하면 객체를 deepcopy해줄 수 있다. 따라서 객체들이 Object 클래스의 clone()메서드를 가지고 있다면 쉽게 깊은 복사를 할 수 있다. 예를들어 Array의 API를 보자. public final class Array extends Object 라고 되어 있다. 따라서 clone을 사용하면 쉽게 deepcopy를 할 수 있다.(primitive 타입 배열일때) 내가 만든 클래스 인스턴스의 deepcopy 내가 만든 class의 deepcopy를 하려면 Clone..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ceZ1t1/btqWNcJ3Ysn/wMabCtyKUpa5KUESKHf64K/img.png)
자바의 객체의 타입에는 Immutable 타입과 mutable타입이 있다. 객체들은 기본적으로 heap영역에 할당되고 stack영역에 래퍼런스 값을 갖는 참조 변수들로 접근 가능하다. immutable(불변) 객체 이름에서 알 수 있듯이 변경 불가능,바뀌지 않는 객체이다. immutable 객체의 종류에는 대표적으로 String, Boolean, Integer, Float, Long 등이 있다. (객체이므로 String을 제외하면 primitive의 래퍼타입이다). 이제 immutable 객체의 불변이라는 개념을 자세히 보자. new 연산자로 객체를 생성하면 heap영역에 객체가 생기고 래퍼런스 값을 가지는 변수가 stack에 생길 것이다. 불변 객체라는 것은 이 객체의 값을 heap 영역에서 바꿀 수 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bW1ZKV/btqWGLLZ0pa/1Zi34NLizmf9l2Xq2wwJ50/img.png)
Java Virtual Machine(JVM)이란? java와 운영체제(OS) 사이에서 중계자 역할을 해준다. 자바가 운영체제 종류,플랫폼에 관계없이 독립적으로 실행 가능하도록 해준다. 메모리 관리를 GC를 통해서 자동으로 해준다. 왜 JVM 메모리 구조를 알아야 할까? 메모리 설계가 잘되어 있는 프로그램에 비해 메모리 고려가 되지 않은 프로그램은 속도 저하 현상이나 튕김 등의 현상이 일어날 확률이 크다. 결과적으로, 같은 기능의 프로그램이라 하여도 메모리의 관리에 따라 성능이 차이가 나게 된다. 따라서 메모리 구조를 파악하고 한정된 메모리를 효율적으로 사용해야 한다. 자바 실행 과정 -Java Compiler: Java source(.java)파일을 바이트 코드로 바꿔 .class파일로 만들어 준다. ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/69QUb/btqWc9A9A4P/guvrTvQtyBIkcKKMkGq7w0/img.png)
자바에서의 배열 정렬은 크게 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("정..
www.acmicpc.net/problem/4344 코드 배운점 printf,println의 차이 printf printf는 c에서 쓰던 것과 방식이 같다. System.out.printf ("출력서식",출력할 내용) ==> %d(정수) %f(실수) %c(문자) %s(문자열)들을 사용해서 표기 할 수 있다. 당연히 %.2f와 같은 방식으로 소수 몇번 째 자리까지 출력할지 정할 수 있다. println System.out.println("정답은"+result)와 같이 문자열은 ""로 감싸주고 변수들을 섞어서 원하는 출력을 만들어 준다. 여기서 +는 한쪽이라도 문자열일 때는 문자열을 이어 붙이고 숫자끼리라면 덧셈을 해준다. ex) System.out.println("3+5" +5); >>3+55 ex)Sys..