SlideShare a Scribd company logo
1 of 10
Download to read offline
Day1. Early Bird
PK.Choi
"본 자료는 학습 목적으로 작성하였으므로 잘못된 내용이 있을 수 있습니다. 오타나 내용에 대한 피드백 부탁드립니다"
0.1 Class & Object
0.1 Instance & Memory
*Tv t1 = new Tv();
0x100t1 null
false
power()
*Tv t2= new Tv();
*t2=t1
0x200t2 null
false
power()
0x100t1 null
false
power()
0x200t2 null
false
power()
GarbageCollector
0.2 JVM 메모리구조
1. Method Area
- 클래스파일을 읽고, 분석 정보를 저장 (+클래스변수도 여기생성)
2. heap Area
- 모든 인스턴스가 생성되는 공간.인스턴스 변수들이 생성되는곳
3. stack Area
- 메서드 작업에 필요한 메모리공간제공,순차적
[main//fistMehtod//secondMethod….]
0.3 Static
1. 멤버변수 중 공통으로 사용한곳에 Static 변수 사용
2. Static 변수/메소드는 instance가 아니어도 사용가능
4. method내에 인스턴스변수를 사용하지 않을경우 Static을 붙이는것을 고려
3. Static Mehod는 인스턴스 변수(멤버변수) 사용 불가
+0.4 SingleTon
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance(){
return instance;
}
}
1. //생성자를 private ==> new해서 만들길 없게끔
//static한 instance를 만듦 ==> getInstance할
때 같은 static instance를 리턴
=> Static 하기때문에 사용하지않아도 메모리에 올라며 낭비.
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public synchronized static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
2.// 인스턴스의 null여부를 판단하여 처음 생성된 인스턴스를 반환.
// multiThread safe하게 처리하기위해 synchronized를 사용.
=> 스레드가 여러개일경우. getInstance를 호출할떄마다 동기화되어 성능 저하
즉, 매 쓰레드마다 인스턴스를 생성되어 무리다.
스레드 가 어떻게 접근하든 synchronized되어서 만들어짐
+0.4 SingleTon
public class Singleton {
private volatile static Singleton instance;
private Singleton() {
}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
3.// DoubleChacking -> 인스턴트가 널? => 동기화하여 인스턴스생
성-> 그외의경우 있는 인스턴스 리턴
=> Reflection과 Serialization 으로 다른 문제를 발생시킬수있다.
스레드가 A가 들어가고 뉴해서 만들어지면 최신 버전(new)
된것이 업데이트되고(volatile로 원자성 보장) 스레드B가 들어가면
보장된 상태로 들어가기때문에 바로 instance
Return 됨.
+0.4 SingleTon
4.//Enum 을 이용한 singelton
=> Serialization 으로 문제를 발생시킬수있다.
enum Singleton
{
INSTANCE;
public static Singleton getInstance()
{
System.out.println("make SingleTOn");
return INSTANCE;
}
}
+0.4 SingleTon

More Related Content

What's hot

Scope and Closure of JavaScript
Scope and Closure of JavaScript Scope and Closure of JavaScript
Scope and Closure of JavaScript Dahye Kim
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 Sehyeon Nam
 
Stl vector, list, map
Stl vector, list, mapStl vector, list, map
Stl vector, list, mapNam Hyeonuk
 
[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항MinGeun Park
 
Windows via c/c++ 스터디9장
Windows via c/c++ 스터디9장Windows via c/c++ 스터디9장
Windows via c/c++ 스터디9장HolyTak
 
Windows via c/c++ ch03. 커널오브젝트
Windows via c/c++ ch03. 커널오브젝트Windows via c/c++ ch03. 커널오브젝트
Windows via c/c++ ch03. 커널오브젝트ssuser0c2478
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)MIN SEOK KOO
 
Windows via c++ part 1
Windows via c++ part 1Windows via c++ part 1
Windows via c++ part 1Shin heemin
 

What's hot (10)

Scope and Closure of JavaScript
Scope and Closure of JavaScript Scope and Closure of JavaScript
Scope and Closure of JavaScript
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
 
Stl vector, list, map
Stl vector, list, mapStl vector, list, map
Stl vector, list, map
 
[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항
 
Windows via c/c++ 스터디9장
Windows via c/c++ 스터디9장Windows via c/c++ 스터디9장
Windows via c/c++ 스터디9장
 
Stl 컨테이너
Stl 컨테이너Stl 컨테이너
Stl 컨테이너
 
Windows via c/c++ ch03. 커널오브젝트
Windows via c/c++ ch03. 커널오브젝트Windows via c/c++ ch03. 커널오브젝트
Windows via c/c++ ch03. 커널오브젝트
 
120114 windows viacpp_03
120114 windows viacpp_03120114 windows viacpp_03
120114 windows viacpp_03
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
Windows via c++ part 1
Windows via c++ part 1Windows via c++ part 1
Windows via c++ part 1
 

Similar to 01.early bird singleton

android_thread
android_threadandroid_thread
android_threadhandfoot
 
불변객체 적용으로 리액트 성능 최적화
불변객체 적용으로 리액트 성능 최적화불변객체 적용으로 리액트 성능 최적화
불변객체 적용으로 리액트 성능 최적화Hun Yong Song
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ patternjinho park
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 patternjinho park
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리MinGeun Park
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11hungrok
 
Runtime Data Areas_Wh apm
Runtime Data Areas_Wh apmRuntime Data Areas_Wh apm
Runtime Data Areas_Wh apm엑셈
 

Similar to 01.early bird singleton (8)

android_thread
android_threadandroid_thread
android_thread
 
불변객체 적용으로 리액트 성능 최적화
불변객체 적용으로 리액트 성능 최적화불변객체 적용으로 리액트 성능 최적화
불변객체 적용으로 리액트 성능 최적화
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
Storm 훑어보기
Storm 훑어보기Storm 훑어보기
Storm 훑어보기
 
Runtime Data Areas_Wh apm
Runtime Data Areas_Wh apmRuntime Data Areas_Wh apm
Runtime Data Areas_Wh apm
 

01.early bird singleton

  • 2. "본 자료는 학습 목적으로 작성하였으므로 잘못된 내용이 있을 수 있습니다. 오타나 내용에 대한 피드백 부탁드립니다"
  • 3. 0.1 Class & Object
  • 4. 0.1 Instance & Memory *Tv t1 = new Tv(); 0x100t1 null false power() *Tv t2= new Tv(); *t2=t1 0x200t2 null false power() 0x100t1 null false power() 0x200t2 null false power() GarbageCollector
  • 5. 0.2 JVM 메모리구조 1. Method Area - 클래스파일을 읽고, 분석 정보를 저장 (+클래스변수도 여기생성) 2. heap Area - 모든 인스턴스가 생성되는 공간.인스턴스 변수들이 생성되는곳 3. stack Area - 메서드 작업에 필요한 메모리공간제공,순차적 [main//fistMehtod//secondMethod….]
  • 6. 0.3 Static 1. 멤버변수 중 공통으로 사용한곳에 Static 변수 사용 2. Static 변수/메소드는 instance가 아니어도 사용가능 4. method내에 인스턴스변수를 사용하지 않을경우 Static을 붙이는것을 고려 3. Static Mehod는 인스턴스 변수(멤버변수) 사용 불가
  • 7. +0.4 SingleTon public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance(){ return instance; } } 1. //생성자를 private ==> new해서 만들길 없게끔 //static한 instance를 만듦 ==> getInstance할 때 같은 static instance를 리턴 => Static 하기때문에 사용하지않아도 메모리에 올라며 낭비.
  • 8. public class Singleton { private static Singleton instance; private Singleton() { } public synchronized static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } } 2.// 인스턴스의 null여부를 판단하여 처음 생성된 인스턴스를 반환. // multiThread safe하게 처리하기위해 synchronized를 사용. => 스레드가 여러개일경우. getInstance를 호출할떄마다 동기화되어 성능 저하 즉, 매 쓰레드마다 인스턴스를 생성되어 무리다. 스레드 가 어떻게 접근하든 synchronized되어서 만들어짐 +0.4 SingleTon
  • 9. public class Singleton { private volatile static Singleton instance; private Singleton() { } public static Singleton getInstance(){ if(instance == null){ synchronized(Singleton.class){ if(instance == null){ instance = new Singleton(); } } } return instance; } } 3.// DoubleChacking -> 인스턴트가 널? => 동기화하여 인스턴스생 성-> 그외의경우 있는 인스턴스 리턴 => Reflection과 Serialization 으로 다른 문제를 발생시킬수있다. 스레드가 A가 들어가고 뉴해서 만들어지면 최신 버전(new) 된것이 업데이트되고(volatile로 원자성 보장) 스레드B가 들어가면 보장된 상태로 들어가기때문에 바로 instance Return 됨. +0.4 SingleTon
  • 10. 4.//Enum 을 이용한 singelton => Serialization 으로 문제를 발생시킬수있다. enum Singleton { INSTANCE; public static Singleton getInstance() { System.out.println("make SingleTOn"); return INSTANCE; } } +0.4 SingleTon