- 자바
- 프로그래머스
- Docker
- static
- nginx
- 스프링
- join
- SSL
- java
- springboot
- spring boot
- spring mvc
- Django
- 데이터베이스
- DI
- sql
- mysql
- select
- spring
- 1차원 배열
- @transactional
- AWS
- spring security 6
- jpa
- ORM
- 문자열
- hibernate
- 스프링부트
- PYTHON
- string
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
목록java (39)
개발하는 자몽

이 글은 김영한 님의 "스프링 DB 1편 - 데이터 접근 핵심 원리" 강의에 기반하여 쓰였습니다. 스프링이 제공하는 예외 추상화를 이해하기 위해서는 자바 기본 예외에 대한 이해가 필요하다. 자바의 모든 객체의 최상위 부모는 object이다. 따라서 예외의 최상위 부모도 object이다. Throwable은 최상위 예외로 하위에 Exception과 Error가 있다. Error는 애플리케이션에서 복구가 불가능한 시스템 예외로 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 상위 예외를 catch로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안 되는데, Error 예외도 함께 잡을 수 있기 때문이다. 애플리케이션 로직은 이러한 이유로 Exc..
인프런 김영한 님의 스프링 인강을 보며 코딩을 하다가 궁금한 점이 생겨서 정리해본다. public class ApplicationContextSameBeanFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class); ... @Configuration static class SameBeanConfig { @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public MemberRepository memberRepository2() { return ..
Class 클래스 Java의 모든 클래스, 인터페이스는 컴파일 후 .class 파일로 생성된다. 이 파일에는 멤버 변수, 메서드, 생성자 등의 객체의 정보가 담겨있다. Class 클래스는 컴파일된 class 파일에서 객체의 정보를 가져올 수 있다. forName() Class의 static 메소드인 forName은 클래스의 이름을 매개변수로 받아서 Class 객체를 리턴해준다. 이 메서드는 해당 statement가 수행될 때 매개변수로 받은 클래스를 메모리에 적재(load)한다. 이를 동적로딩이라 하며 상황에 따라 라이브러리나 클래스를 로드할 수 있어서 메모리를 아낄 수 있다. | Note - 동적 로딩(dynamic static) : 컴파일 시 데이터 타입이 모두 binding되어 자료형이 로딩되는 것..
Wrapper class 프로그램에 따라 기본 타입(primitive type)의 데이터를 객체를 취급해야 하는 경우 먼저 데이터를 객체로 변환한다. 8개의 기본 타입에 해당하는 데이터를 객체로 포장하는 클래스를 wrapper class라고 한다. wrapper class는 각각의 타입에 해당하는 데이터를 인수로 받아, 해당 값을 갖는 객체로 만든다. wrapper 클래스는 모두 java.lang 패키지에 포함된다. 자바의 기본 타입에 대응하여 제공하고 있는 wrapper 클래스는 아래와 같다. primitive type wrapper class byte Byte short Short int Integer long Long float Float double Double char Character bool..
상속을 공부하다가 is-a, has-a 관계를 명확하게 알아둬야 사용에 유의할 수 있음을 깨달았다. is-a 간단히 is-a는 'A는 B이다'의 '~이다'와 같다. is-a는 추상화(형식이나 클래스와 같은)들 사이의 포함 관계를 의미한다. 한 클래스 A가 다른 클래스 B의 서브클래스임을 말한다. 타입 A는 타입 B의 명세(specfication)를 암시한다는 점에서 타입 B의 서브타입이라고도 할 수 있다. is-a 관계는 타입 또는 클래스 간의 has-a 관계와는 대조된다. has-a 및 is-a 관계들 간의 혼동은 실세계 관계 모델에 대한 설계에 있어 자주 발견되는 에러이다. 또한 객체 또는 타입 간의 instance-of 관계와도 대조된다. - 위키피디아 - is-a 관계를 통해 생성된 클래스 및 객..
static static 키워드를 사용하여 static 변수와 static 메서드를 만들 수 있다. 각각 정적 필드와 정적 메서드라고도 하며 둘 모두를 정적 멤버(클래스 멤버)라고 말한다. 이 둘은 객체(instance)에 소속된 멤버가 아닌 클래스에 고정된 멤버로, 클래스 로더(classloader)가 클래스를 로딩해서 메서드 메모리 영역에 로드할 때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용이 가능하다. static 키워드로 생성된 정적 멤버는 heap이 아닌 static 영역에 메모리가 할당된다. static 영역에 할당된 메모리는 모든 객체가 공유할 수 있어서(같은 곳의 메모리 주소만 바라봄) 어디서든지 참조할 수 있다는 장점을 갖는다. 그러나 Garbage Collect..

자바를 공부하면서 new 키워드 없이 객체를 생성하면(only declaration) 이 객체는 메모리를 할당받는지 궁금했다. 처음에는 단순히 이렇게 검색했다. "자바 new 역할" "자바 메모리 할당" "자바 new 객체" 위와 같이 검색하면 new로 인스턴스화된 객체의 메모리 상태를 알려주는 글들이 수두룩하게 나온다. 하지만 내가 궁금했던 것은 인스턴스화 이후의 메모리 상태가 아니었기 때문에 친구에게 도움을 요청했다. 저렇게 검색 키워드 추천을 받고 다시 검색을 했다. "JVM 메모리 할당" "JVM declare memory" JVM과 선언, 메모리 이 세가지 키워드를 함께 검색하니 글을 하나 발견했다. JVM allocates memory at declaration for primitive typ..

문제 문제 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { static boolean check(String str) { boolean word[] = new boolean[26]; int prev = 0; for (int i = 0; i < str.length(); i++) { int now = str.charAt(i); //앞선 문자와 i번째 문자가 같지 않은 경우 if (prev != now) { //해당 문자가 처음 나오는 경우 (false인 경우) if (!word[now - 'a']) { word[now - 'a'] = true; prev =..

문제 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int len = str.length(); int cnt = 0; for (int i = 0; i < len; i++) { char ch = str.charAt(i); if (ch == 'c' && i < le..

문제 코드 import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { //buffer와 switch-case를 사용한 방법 외 다른 방법 int cnt = 0; int input; while (true) { input = System.in.read(); if (input == '\n') break; if (input < 68) cnt += 3; else if (input < 71) cnt += 4; else if (input < 74) cnt += 5; else if (input < 77) cnt += 6; else if (input < 80) cnt += 7; else ..