전역변수 ( 생성하고 초기화안해도 자바가 알아서해줌 )
static 변수 (클래스변수)
객체생성을 하지 않아도 사용 가능, 객체생성을 여러번하여도 하나의 저장 공간을 가짐
인스턴스변수
객체생성을 해야만 사용 가능, 객체생성을 할때마다 서로 다른 저장공간을 가짐
지역변수 ( 생성하고 초기화 해줘야함 )
깊은복사는 실제값을 새로운 메모리공간에 복사 -
( 서로다른객체를 참조하기 때문에 원본의 변경이 복사본에 영향을 미치지않음. )
얇은복사는 참조값만 복사 ( clone ) -
( 같은객체를 공유해서, 원본을 변경하면 복사본도 영향을 받음. )
최초 한번만 메모리 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴,
인스턴스가 절대적으로 한개만 존재하는 것을 보증하고 싶을 때 사용
커넥션풀, 스레드풀, 디바이스설정 객체 같은 경우에 사용
외부에서 new를 통해 객체생성못하게막음.
public class CarClass
prviate CarClass(){}
private static CarClass car = new CarClass();
public static CarClass getInstance() { return car; }
참고 https://devmoony.tistory.com/43
Array
크기가 정해져있고, 주로 검색하는데 사용 ( 데이터 추가/삭제가 비효율적)
데이터 삭제 시 빈공간으로 둠 (정적)
ArrayList
크기가 정해져있지않고, 데이터 추가/삭제가 빈번할 때 사용
데이터 삭제 시 메모리의 빈틈을 두지않음 (동적)
a. 개발자가 소스코드 작성 (.java)
b. build
c. java compliler의 javac의 명령어를 통해 바이트코드(.class)를 생성
d. class loader를 통해 jvm내로 로드
e. 실행엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석되어(각 운영체제에 맞는 기계어)Runtime Data Area에 배치
private > default > protected > public 순으로 보다 많은 접근을 허용
접근제어자 | 외부 패키지 | 상속관계 | 외부클래스 | 동일클래스 |
---|---|---|---|---|
public | O | O | O | O |
protected | X | O | O | O |
default | X | X | O | O |
private | X | X | X | O |
메서드 템플릿 패턴 (추상클래스) 카톡,SMS발송
전략패턴 (인터페이스)
Java에서 Class의 인스턴스가 생성된 이후에 내부 상태를 변경할 수 없는 객체.
String은 불변객체이다. String이 가변객체라면 상수풀을 사용할 수 없다.
String이 가변객체라면 String name1 = “a” ; String name2 = “a”; 이라는 코드가 있다고 하면 name1 = “사람” 으로 바꿔버리는 순간 name2가 가리키는 값은 더이상 “a”이 아닌 “사람”이된다. 따라서 상수풀의 재활용성을 이용하기위해 String은 불변객체로 설계해야한다.
String
불변 객체이므로 +
연산으로 문자열을 이어 붙이려고 해도 매번 새로운 객체를 할당해야 한다. 하지만, StringBuilder, StringBuffer는 가변 객체이고 내부 char[]
배열의 사이즈를 조절하여 문자열을 이어 붙이기 때문에 새로운 객체를 최소로 할당할 수 있다.
String
: 문자열 연산이 적고 멀티스레드 환경일 경우 사용, thread safe
StringBuffer
: 동기화키워드(synchronized) 를 지원해서 멀티쓰레드 환경에서 안전하다.
StringBuilder
: 동기화를 지원하지않지만 단일쓰레드에서의 성능은 StringBuffer보다 뛰어나다.
String, StringBuffer는 thread-safe 보장
StringBuilder는 thread불안전
두개의 쓰레드가 동시에 하나의 리소스에 접근할 때 순서를 맞춰서 데이터에 오류가 발생하지 않도록 하는 것
멀티스레드 환경에서 여러 스레드가 동시에 접근해도 프로그램 실행에 문제가 없는 특징 혹은 상태. 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도, 각 스레드에서의 함수의 수행결과가 올바로 나오는 상태
a. Re-entrancy
b. Thread-local storage
c. Mutual exclusion
d. Atomic operations
e. immutable Object