일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- lambda
- JPA
- String
- 토비의스프링
- 링커
- Immutable
- 링킹
- FunctionalInterfaces
- Kotlin for Java Developers
- 프록시
- gradle
- 메이븐
- exception
- ApplicationContext
- IOC
- beanfactory
- ORM
- java
- springwebmvc
- 클린코드
- Spring
- DispatcherServlet
- hibernate
- AutoConfiguration
- DesignPattern
- 빌드툴
- springboot
- 자바
- 토비의스프링3.1
- 컴퓨터시스템
- Today
- Total
목록프로그래밍/Java (31)
엔지니어로 가는 길
출처: https://www.geeksforgeeks.org/stream-in-java/ Java Stream API(Java 8) 자바 8에 등장한 자바 스트림 API는 콜렉션을 처리할 때 사용된다. 스트림은 콜렉션 객체들의 흐름이라고 생각할 수 있다. 물이 나오는 곳에 파이프를 연결하여 원하는 곳으로 이동시킬 수 있듯, 스트림도 메소드(파이프)를 연결(파이프라인화)하여 원하는 결과를 얻을 수 있다. 자바 스트림의 특징 -스트림은 자료구조가 아니다. 콜렉션이나 배열 또는 입출력 채널에서 입력을 취한다. (입력만 취한 상태는 물만 받아놓은 상태이므로 이 자체로는 아무것도 아니다. 여기에 파이프를 연결하여 물이 흐르게해야 의미가 생긴다.) -스트림은 원본 자료구조를 바꾸지 않는다. 오직 파이프라인화된 메소..
출처: 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. ..
출처: 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..
Java의 접근 제어자는 아래와 같다. private: 클래스 내부에서만 접근 가능 default(package-private): 클래스 내부와 패키지 내의 다른 클래스에서 접근 가능 protected: default에 더해 다른 패키지라도 자식 클래스일 경우 접근 가능 public: 외계에서도 접근 가능 클래스 접근제어자 클래스에는 접근제어자 package-private와 public만 가능하다. (내부 클래스(nested class)의 경우 다른 접근 제어자를 쓸 수 있는데 이는 다음에 살펴보도록 한다.) 패키지 외부에서는 package-private 클래스가 보이지 않는다. 따라서 상속받을 수도 없고, 객체를 생성할 수도 없다. package-private 클래스가 자식 클래스에서도 접근이 안된다고..
논리 연산자 &, |와 &&, ||는 뭐가 다를까? 먼저 결과만 보자면 둘 모두 같은 결과를 낸다. &와 && 모두 모든 조건이 참일 때 참이고, |와 || 모두 하나의 조건만 참이면 참이다. 하지만 &와 |는 &&, ||와 달리 이미 조건식의 결과가 결정이 났다고 해도 모든 조건을 끝까지 검사한다. &와 |에서만 y의 값이 증가된 것을 확인할 수 있다.
원문 링크 https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html 언어로서의 자바 자바의 특징 자바 코드가 실행되는 과정 자바에서는 소스코드를 plain 텍스트 파일(.java)에 작성한다. 소스코드는 javac 컴파일러에 의해 .class 파일로 컴파일된다. 이때 프로세서에게 .class 파일을 줘도 이해하지 못한다. .class 파일은 바이트 코드로 작성되어 있기 때문이다. 이는 Java Virtual Machine(이하 JVM)가 이해하는 기계어이다. JVM이 바이트 코드를 프로세서가 이해할 수 있는 명령어로 번역해준다. Write once, run everywhere 어떤 환경에서 작성되었든 JVM만 있다면 자바 프로그램은..
https://www.youtube.com/watch?v=ESwVlixFtak primitive 타입이 아니라 사용자 정의 객체인 경우 어떤 객체가 더 큰지 사용자가 기준을 명시해주어야 한다. Java에서는 이를 위해 Comparable이라는 interface를 지원한다. 즉, 사용자 객체가 Comparable interface를 구현하고 있으면 그 객체는 마치 primitive 타입처럼 비교 기준이 세워져있음을 뜻하므로 Java API가 제공하는 정렬 기능을 사용할 수 있다. 예를 들어 Fruit이라는 객체가 이름과 재고라는 두 가지 필드를 가지고 있고, Comparable을 구현하여 compareTo를 이름이 더 빠른 것이 더 크다고 재정의했다면 Fruit 배열이 있을 때 Arrays.sort에 Fr..
ConcurrentModificationException와는 초면이다. 예외가 발생한 위치와 예외의 이름으로부터 이 예외가 언제 발생하는지 짐작할 수 있었다. 예외를 발생시킨 코드는 아래와 같다. 구글링해보니 아래와 같은 설명이 있었다. 아래의 두 코드는 순서대로 "How to avoid java.util.ConcurrentModificationException when iterating through and removing elements from an ArrayList"라는 제목의 글에 있는 질문자의 코드와 답변자의 코드이다. 내 코드에서 Docs 역시 ArrayList였으므로 위의 코드처럼 수정해보았더니 exception을 피할 수 있었다.
A라는 클래스를 예로 들어보자. 1. new 연산자 이용 A a = new A(); 2. Class 클래스 이용 Class clazz = Class.forName("me.jackjack.A"); A a = clazz.newInstance(); (Class라는 클래스에 forName 메소드 인자로 클래스의 정보를 넘겨 생성) A.class.newInstance(); (클래스 이름을 이용하여 생성) A a = new A(); a.getClass().newInstance(); (객체(인스턴스) 이름을 이용하여 생성) 2번째 방법을 이용하면 인터페이스를 이용할 때 소스코드의 수정 없이 설정 파일을 수정하는 것만으로 부품을 갈아 끼울 수 있다. 참고자료
Enum의 정의 Enum(enumerated type): 열거형, 서로 연관된 '상수'들의 집합 상수 상수란 변하지 않는 수를 뜻한다. Enum도 클래스 변수와 메소드, 생성자를 가질 수 있다. 위의 코드는 아래의 코드와 같은 역할을 한다. 즉, Fruit에서 단순히 APPLE, PEACH, BANANA라고 나열했을 뿐인데 이름이 각각 APPLE, PEACH, BANANA인 Fruit 타입의 객체(instance)가 생성되는 것이다. Enum은 서로 연관된 '상수'들의 집합이라고 했는데 웬 객체인가? 객체들을 보면 final이라는 키워드가 붙어 있다. 즉, 초기화 된 이후에 변경이 불가능하다는 뜻이다. 따라서 이들은 앞으로 변하지 않음으로 상수라고 할 수 있다. Enum의 특징 Enum의 생성자는 반드시..