일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- 백준 15685
- 백준 17779
- 백준 16719
- springboot
- with recursive
- JVM
- 프로그래머스
- Spring Boot
- MySQL
- MSA
- spring oauth
- re.split
- 백준 17626
- spring security
- 백준 파이썬
- 백준 19238
- spring cloud
- Coroutine
- 백준 16235
- Spring
- java 기술면접
- 프로래머스
- java
- 백준 16236
- 웹어플리케이션 서버
- sql 기술면접
- 파이썬
- 백준
- JPA
- Today
- Total
목록java (8)
시작이 반
JVM기반의 언어를 사용하다가 (Java, Kotlin) 보면 OS에 독립적이라는 말이 나온다. 옛날에는 JVM위에서 동작하기 때문에 OS에 독립적이구나 하고 넘어갔는데 최근에 왜 OS에 독립적인지 정확히 알고싶어 졌다. 자바의 런타임 과정은 아래와 같다. JDK를 통해 바이트코드 생성 ( .java -> .class ) 바이트코드를 JRE에 전달 ( .class ) JRE를 통해 바이트코드를 JAVA 명령어로 실행 이를 JVM이 실행 여기서 JVM이 내부에서 특정 OS에 맞게 자바 언어를 인터프리터나 JIT를 통해 기계어로 변환시켜준다. 때문에 어떤 OS를 사용하든간에 JVM이 JAVA가 실행되는 것을 보장한다. 옜날에는 Java언어는 다른 언어에 비해서 느리다는 말이 나왔었는데 이는 위에 런타임과정에..
C나 C++은 OS레벨의 메모리에 직접 접근 한다. 때문에 사용자가 직접 메모리 누수를 막기 위해 메모리 해제를 해줘야 한다. 자바는 OS에 직접적으로 접근하지 않고 Java Virtual Machine(JVM) 이라고 하는 가상 머신을 통해서 간접적으로 접근을 하게 된다. 이런 JVM은 메모리를 자동으로 관리를 해주는데 이렇기 때문에 메모리 누수가 없으며 사용자가 메모리초과 이외에는 신경을 쓰지 않아도 된다는 장점을 가지고 있다. 그렇다면 JVM은 어떻게 메모리를 자동으로 관리를 해주는 것일까? JVM에는 Garbage Collection(GC)라고 하는 것이 존재한다. 이 가비지 컬렉션은 Heap영역을 스캔하여 사용하지 않는 메모리를 제거해준다. 사용하고 있는지 사용하지 않고 있는지 어떻게 아는 것인..
이전에 이중반복문을 탈출하기 위해서는 하나의 Flag를 만들어서 탈출을 시켰다... boolean check = true; for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ if(j != 4){ check = false; break; } } if(!check) break; } 이런식으로 check 라는 변수를 만들어서 2번의 break를 통해 탈출을 하였다. 하지만 한번에 반복문을 탈출하는 방법이 있었다 for문에 라벨명을 지정하고 이 라벨명을 통해 탈출을 하는 것이다. loop: //라벨명 for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ if(j != 4){ break loop; } } }
Import import java.util.*; Input BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br.readLine(); < 한줄씩 읽기 StringTokenizer st = new StringTokenizer(br.readLine(), "기준"); < 기준 정해서 나누기 st.nextToken(); < 자른 문자열 하나씩 읽기 Math Math.max() : 최대값 Math.min() : 최소값 Math.abs() : 절대값 Math.pow(x, y) : x의 y제곱승 Arrays Arrays 1차배열 : Arrays.toStrign(배열) 2차배열 : Arrays.deepToString(배열) 배열 정렬 ..
클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리하였다. SRP: 단일 책임 원칙(single responsibility principle) - 한 클래스는 하나의 책임만 가져야함 (책임이라는 것은 모호함) - 중요한 기준은 변경이다. 변경이 있을때 파급 효과가 적으면 단일 책임 원칙을 잘따른것 - 응집력이 있다면 병합, 결합력이 있다면 분리 OCP: 개방-폐쇄 원칙 (Open/closed principle) - 확장에는 열려있으나 변경에는 닫혀있어야함 (확장을 하려면 변경을 해야하는데????) - 요구사항 변겅이나 추가사항이 발생하더라도 기존 구성요소는 수정x, 확장하여 재사용해야함 - 다형성을 생각 (인터페이스) - 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가..
Lombok Java 라이브러리중 하나로 반복적으로 생성해야 하는 코드들을 어노테이션기반으로 자동 생성해주는 라이브러리 Getter/ Setter @Getter @Setter private String name; user.setName("test"); String userName = user.getName(); 필드 레벨이 아닌 클래스 레벨에 @Getter / @Setter을 선언하면 모든 필드에 getter, setter가 생성된다. Constructor @NoArgsConstructor : 파라미터가 없는 기본 생성자 생성 @RequiredArgsConstructor : final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 생성 @AllArgsConstructor : 모든 필드 값을 파라..
람다 표현식(Lambda expression)? 메소드를 하나의 식으로 표현한것, 익명 함수를 지칭하는 용어 람다 대수는 이름을 가질 필요가 없다. - 익명 함수 2개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화 될 수 있다. - 커링 작성 문법 (매개변수 목록) -> {함수 몸체} 유의사항 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수 있다. 매개변수가 하나인 경우에는 괄호()를 생략할 수 있다. 함수의 몸체가 하나의 명령문만으로 이루어진 경우에는 중괄호{} 를 생략할 수 있다. (이때 세미콜론;은 붙이지 않는다.) 함수의 몸체가 하나의 return문으로만 이루어진 경우에는 중괄호{}를 생략할 수 없다. return문 대신 표현식을 사용할 수 있으며, 이때..
java.util.Optional 클래스 Optional은 T 타입의 객체를 포장해주는 래퍼 클래스(Wrapper class)이다. 예상치 못한 NullPointerException 예외를 Optional에서 제공되는 메소드로 간단히 회피할 수 있다. null이나 null이 아닌 값을 담을 수 있는 클래스이다. 즉, null값으로 인해 발생하는 예뢰를 처리할 수 있게 된다. Optional 객체 생성 Optional.empty() : null을 담고있는, 비어있는 Optional 객체 생성 Optional.of(value) : value값이 null이 아닌 객체를 담고 있는 Optional객체를 생성, valuel값이 null이 아닌 경우에 사용 null이 넘어올 경우 NPE를 던진다. Optional...