일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 세그먼트 트리
- 데이터 flow
- ddd
- 비트마스크
- docker
- dfs
- JPA
- 포트앤어댑터 아키텍처
- 다익스트라
- DP
- Redis
- 백준
- 파이썬
- dataframe
- 알고리즘
- 문자열
- 스프링
- 이펙티브 자바
- 헥사고날 아키텍처
- UML
- 자바
- springboot
- spring security
- BFS
- disjoint set
- 위상정렬
- series
- equals
- pandas
- java
- Today
- Total
목록자바 메모장 (17)
코딩못하는사람
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("정..
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..
자바의 String 객체와 String 리터럴 자바에서 String은 객체로 선언할 수도 있고 리터럴로도 선언할 수 있다. String temp=new String("abcde"); 은 new 연산자를 활용한 객체 생성 방식 String temp1="abcde"; 은 문자열 리터럴 방식으로 선언한 방식이다. 객체를 생성하는 방식은 Heap영역에, 리터럴은 Heap영역 속 String constant pool에 저장된다. 예시 그림을 보고 이해하자. String str1 = "madplay"; String str2 = "madplay"; String str3 = new String("madplay"); String str4 = new String("madplay"); 문자열 비교 equals메소드: Str..