일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java
- AutoConfiguration
- 컴퓨터시스템
- 링커
- Spring
- 메이븐
- beanfactory
- DesignPattern
- 빌드툴
- 토비의스프링3.1
- JPA
- 토비의스프링
- IOC
- String
- 링킹
- gradle
- 자바
- ORM
- 클린코드
- ApplicationContext
- springboot
- springwebmvc
- 프록시
- Immutable
- DispatcherServlet
- exception
- hibernate
- FunctionalInterfaces
- lambda
- Kotlin for Java Developers
- Today
- Total
목록프로그래밍 (78)
엔지니어로 가는 길
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bgq5hn/btqFg4BT72x/jc7wYkQOXzmz1UtvuSKZx0/img.png)
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html Method references 람다 표현식에서 하는 일이라고는 이미 존재하는 메소드를 호출하는 게 전부인 경우 Method references를 사용할 수 있다. 이는 말 그대로 (일반적인 람다 표현식의 문법을 따르는 것이 아니라) 그 메소드의 이름을 언급하는 것인데 람다 표현식을 사용한 것보다 간결하고 명확하다. Person이라는 클래스를 예로 들어보자. age라는 변수를 가지고 있고, compareTo는 두 개의 Person 객체를 인자로 받아 age를 비교하는 static 메소드이다. 세 개의 Person 객체를 만든 뒤 배열에 넣고 Arrays의 sort 메소드를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bh6A5R/btqFaCUotW7/Ay1YB0fi3CROKGHFKwVVr0/img.png)
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html standard functional interfaces는 java.util.function에 있는 인터페이스로 java 1.8부터 지원한다. Consumer는 standard functional interfaces 중 하나이다. Interface Consumer 하나의 인자를 받아 연산을 수행하지만 아무것도 리턴하지 않는다. 다른 대부분의 functional interfaces와 달리 side-effects를 기대하는 인터페이스..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vkkQ5/btqE40HlVLi/pJuvlx4eV1xK8CH6rWKF6k/img.png)
https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html 이름이 없는 익명 클래스가 이름 있는 클래스보다 더 간결하지만 하나의 메소드만 갖는 클래스의 경우에는 익명 클래스조차 과하다. 람다 표현식을 이용하면 하나의 메소드만을 갖는 클래스의 객체를 익명 클래스보다 더 간결하고 분명하게 표현할 수 있다. 람다 표현식의 문법 -괄호로 속 콤마로 구분되는 형식 매개변수의 리스트 람다 표현식에서 매개변수의 데이터 타입을 생략할 수 있다. 또한 매개변수가 하나라면 괄호도 생략할 수 있다. -arrow token: -> -body: 단일 표현식이나 statement block 위와 같이 body가 단일 표현식으로 이루어진 경우 표현식을 계산..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/453cD/btqEsEexjv7/gKx6wSl2LwKTOh3O6Xnav1/img.png)
출처: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html 익명 클래스 - 익명 클래스를 사용하면 코드를 더 간결하게 만들 수 있다. - 익명 클래스는 정의되는 동시에 객체가 생성된다. - 이름이 없다는 점을 빼면 지역 클래스와 유사하다. (지역 클래스를 한 번만 사용하면 되는 경우라면 익명 클래스를 사용하라.) - 익명 클래스는 자신을 포함하는 외부 클래스(이하 enclosing class)의 멤버에 접근할 수 있다. (final 또는 유사 final로 선언된 변수에만 접근할 수 있다.) (지역 클래스에서도 final 변수 또는 유사 final로 선언된 변수에만 접근할 수 있는 것 같다.) - 중첩 클래스와 마찬가지로 익명..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kS4Mv/btqEhPmNLYP/ODWdovv1sgHcMcs1PDk891/img.png)
출처: https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html 지역 클래스(Local Classes) 지역 클래스는 블록 안에 정의된 클래스를 말한다. 아래 이미지에서 EnglishGreeting은 지역 클래스이다. 꼭지 1. 지역 클래스의 선언 2. Enclosing class 멤버에 접근하기 (*Enclosing class란 지역 클래스를 포함하고 있는 클래스) 3. 지역 클래스와 내부 클래스의 유사성 1. 지역 클래스의 선언 지역 클래스는 표현식, statements, 블록 모두에서 정의할 수 있다. 예를 들어 메소드의 body나 for문이나 if문 안에서 지역 클래스를 정의할 수 있다. 2. Enclosing class의 멤버에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ukd5n/btqDVffdWap/DBHQbOdWbR14AseWw0jBNk/img.png)
에러메시지 Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`vanilla`.`#sql-1c10_73`, CONSTRAINT `document_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `_user` (`id`)) 상황 @ document라는 테이블과 _user라는 테이블이 있다. @ _user는 사용자를 나타내고, document는 사용자가 쓴 글을 나타내는 테이블이다. @ _user의 PK는 id이다. @ document와 _user 모두 몇 개의 튜플이 존재한다. @ 이후에 document에 user_id라는 컬럼을 추가했다. @ document의 user_id를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d35PKh/btqDTkN0HzT/h3SnZ2ttRuym6MyIe0cWD1/img.jpg)
출처: https://www.geeksforgeeks.org/stream-in-java/ Java Stream API(Java 8) 자바 8에 등장한 자바 스트림 API는 콜렉션을 처리할 때 사용된다. 스트림은 콜렉션 객체들의 흐름이라고 생각할 수 있다. 물이 나오는 곳에 파이프를 연결하여 원하는 곳으로 이동시킬 수 있듯, 스트림도 메소드(파이프)를 연결(파이프라인화)하여 원하는 결과를 얻을 수 있다. 자바 스트림의 특징 -스트림은 자료구조가 아니다. 콜렉션이나 배열 또는 입출력 채널에서 입력을 취한다. (입력만 취한 상태는 물만 받아놓은 상태이므로 이 자체로는 아무것도 아니다. 여기에 파이프를 연결하여 물이 흐르게해야 의미가 생긴다.) -스트림은 원본 자료구조를 바꾸지 않는다. 오직 파이프라인화된 메소..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/AEpmO/btqDQs6lpdS/sxIKhP8V3R3vu7kpPoIMtK/img.png)
출처: https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Program_Counter_PC_Register JVM 런타임 메모리 영역 1. Program Counter(이하 PC) 2. JVM 스택 3. 힙 4. 메소드 영역 5. 런타임 상수 풀 6. 네이티브 메소드 스택 JVM 런타임 메모리 영역은 크게 두 가지로 그룹으로 나눌 수 있다. @스레드별로 갖는 영역: PC, JVM 스택, 네이티브 메소드 스택 이 영역의 데이터는 스레드가 시작할 때 초기화되고, 스레드가 완료될 때 제거된다. @모든 스레드가 공유하는 영역: 힙, 메소드 영역, 런타임 상수 풀 이 영역의 데이터는 JVM이 시작할 때 초기화되고, JVM이 종료될 때 제거된다. 1. ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/GDff5/btqDFpnk5sP/QbsCJHuuKK4CDfztsNCJdk/img.png)
출처: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html 중첩 클래스란 Java에서는 클래스 안에 클래스를 정의할 수 있다. 클래스 안에 정의된 클래스를 nested class(중첩 클래스) 라고 한다. 중첩 클래스는 바깥 클래스의 ‘멤버’이므로 private, protected, public, package-private 모두 가 능하다. (top-level 클래스는 오직 public과 package-private만 가능하다.) 중첩 클래스는 static과 non-static 으로 나눌 수 있는데, static인 경우 static nested class라고 부르고 non-static인 경우 inner class라 부른다. Non-stati..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dRXHdo/btqDyMEFw4m/0fTXWrPNKOKMOo983cNFk1/img.png)
Java의 접근 제어자는 아래와 같다. private: 클래스 내부에서만 접근 가능 default(package-private): 클래스 내부와 패키지 내의 다른 클래스에서 접근 가능 protected: default에 더해 다른 패키지라도 자식 클래스일 경우 접근 가능 public: 외계에서도 접근 가능 클래스 접근제어자 클래스에는 접근제어자 package-private와 public만 가능하다. (내부 클래스(nested class)의 경우 다른 접근 제어자를 쓸 수 있는데 이는 다음에 살펴보도록 한다.) 패키지 외부에서는 package-private 클래스가 보이지 않는다. 따라서 상속받을 수도 없고, 객체를 생성할 수도 없다. package-private 클래스가 자식 클래스에서도 접근이 안된다고..