static static은 컴파일러에 의해 .java에서 .class 파일로 로드될 시 우선적으로 method 영역(static, class영역이라고도 부름) 메모리에 할당된다. 이런 이유로, 객체가 heap영역 메모리에 올라가기 전에 호출해서 사용할 수 있는 것이다. static 적용 지점 블록 변수 메소드 중첩 클래스 static block 해당 객체가 new를 통해 인스턴스화 될 때 최초 한번만 호출한다. public class MyStaticClass { static int a = 10; static int b; //static block static { System.out.println("static block"); b = a * 4; } public MyStaticClass() { System..
final final의 효과 클래스나 메소드 혹은 변수에 final 제어자가 붙을 수가 있는데 각각 다음과 같은 제한이 생긴다. final 클래스 다른 클래스에서 상속을 하지 못 한다. 클래스가 final일 시 해당 클래스의 내부 메소드도 final로 선언되나, 변수의 경우는 final 개념을 갖지 않는다. final 메소드 상속 받은 클래스에서 오버라이딩을 못한다. final 변수(인스턴스 변수 == 전역 변수) 선언과 동시에 초기화하거나 생성자 내에서 값을 지정할 수 있다. 이 또한 그 이후에는 수정이 불가하다. final 변수(지역 변수) 선언과 동시에 초기화하거나 메소드를 실행 시 값을 지정할 수 있다. 단, 그 이후에는 수정이 불가하다. static final 변수(클래스 변수) 선언과 동시에 ..
public static void 선언 이유 Java의 Main Java는 Main에서 시작해서 Main에서 끝난다 Main은 여러 클래스와 연결될 수 있는 중심부의 역할이다. 매인의 public Main을 실행하는데 있어, Main에서는 다른 클래스의 메소드 등을 호출해야하는데, 막상 Main 자체가 다른 곳에서 접근을 허용하지 않는다면 문제가 생길 수 밖에 없어 Main의 접근제한자를 public으로 선언한 것이다. 메인의 static static은 프로그램이 시작하면 따로 인스턴스화 하지 않아도 method 영역 메모리에 호출되어 진다. 이렇게 호출되어진 것들은 프로그램이 종료되기 까지 유지된다. 즉, 프로그램의 시작과 끝을 함께하는 Main 메소드는 프로그램이 종료되는 시점까지 유지해야하기 때문에..
Immutable Immutable Class는 변경이 불가능한 클래스이며, 레퍼런스 타입의 객체이기 때문에 heap영역에 생성된다. Immutable Class는 변경이 불가능한 것이지 재할당은 가능하다. (소스로 살펴보자) //String, Boolean, Integer, Float, Long 등등이 해당 String str = "test"; str = "test2"; //재할당 소스를 통해 확인해보자 String str = "test"; System.out.println(str.hashCode()); str = "test2"; System.out.println(str.hashCode()); Immutable 특징 장점 멀티 스레드 환경에서 thread-safe가 가능하다. 안전한 공유와 재사용이..
Exception Exception, Exception은 원하지 않거나 예기치 않은 이벤트로, 프로그램 런타임에 발생하여 프로그램 명령의 정상적인 흐름을 방해한다. Exception and Error Error : 오류 심각한 문제를 나타내므로, 응용 프로그램에서 try / catch 문을 사용하며 안 된다. Exception : Exception은 상태를 나타내므로, 응용 프로그램에서 try / catch 문을 사용해야 한다. 예외계층 모든 Exception과 Error의 계층은 기본 클래스인 Throwable 클래스의 하위 클래스이다. Exception은 프로그래머가 직접 예외 조건을 잡아야 한다. Ex. NullPointerException Error는 Java 런타임 시스템 ( JVM )에서 런타..
Java에서 어노테이션이란, Java에서 어노테이션은 JEE5부터 새롭게 추가된 요소이다. 어노테이션을 사용하는 이유는, 유효성 검사를 쉽게 할 수 있고 코드가 깔끔해진다. 하지만, 가장 큰 특징은 메타 데이터로 볼 수 있다. 메타 데이터 : 데이터를 위한 데이터로서, 데이터 대해서 설명을 한 데이터이다. Java에서 제공하는 어노테이션 종류 @Override 선언한 메소드가 오버라이드(재정의) 되었다는 것을 나타낸다. @Deprecated 해당 메소드 혹은 객체가 더 이상 사용되지 않음을 표시한 것이다. 만약 해당 메소드 혹은 객체를 사용할 경우 컴파일 경고를 발생시킨다. @SuppressWarnings 선언한 곳의 컴파일 경고를 무시하도록 한다. @SafeVerargs Java7 부터 지원하며, 제네..
오토박싱과 언박싱 Java에서는 int, double, long 등의 기본 자료형(primitive type)의 포장 클래스(wrapper class)가 있어서 기본형을 객체로 다루어야 할 경우 사용할 수 있다. 그림에서 살펴보듯이 생성자는 해당하는 기본형의 값을 줄수도 있고, 문자열 형태로도 줄 수 있다. 단, 문자열 형태로 줄 시 데이터 타입 형식에 맞춰야한다. 박싱과 언박싱 박싱과 언박싱 개념은 JDK 1.5버전 부터 추가되었고, JDK 1.5버전 밑에서는 컴파일러가 기본형과 참조형(int와 Integer)의 관게를 알지 못했다. 박싱(Boxing) : 기본형을 참조형으로 변환하는 것이다. int -> Integer 언박싱(Unboxing) : 참조형을 기본형으로 변환하는 것이다. Integer -..
Garbage Collection 가비지 컬렉션과 관계된 객체 참조 방식들 객체 참조 방식 Java 프로그램에서 하나의 객체는 다른 객체를 참조하고 다른 객체는 또 다른 객체를 참조하는 참조 사슬이 형성되는데, 이 참조 사슬 중 최초로 참조한 것을 Root Set이라고 한다. 힙 영역에 있는 객체들은 총 4가지 경로로 참조를 하게 된다. 힙 내의 다른 객체에 대한 참조(클래스 내에서 다른 클래스 인스턴스화) Java 스택 즉, Java 메소드 실행 시 해당 메소드의 지역변수와 파라미터들에 의한 참조 네이티브 메소드 스택(Java가 아닌 다른 언어로 작성된 코드)에 의해 생성된 객체에 대한 참조 메소드 영역의 정적 변수(static)에 의한 참조 2,3,4에 의해 참조한 것을 Root Set이라고 한다. ..
- Total
- Today
- Yesterday
- flatMap
- try catch finally
- Spring
- 빌더 패턴
- 복사 팩토리
- 인프런
- JPA
- 이펙티브자바
- java
- try with resources
- junit
- 자바8
- 김영한
- java8
- 정적팩터리메서드
- ifPresent
- Effective Java
- 빈 순환 참조
- jdk버전
- 스프링부트
- 생성자
- package-private
- effectivejava
- mustache
- 연관관계
- 이펙티브 자바
- 점층적 생성 패턴
- @Lazy
- 팩토리 메소드 패턴
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |