ㅇ static 변수는 해당 static변수가 선언된 클래스의 모든 인스턴스가 공유하는 변수이다.

 

ㅇ static 으로 선언된 변수는 특정 메모리 공간 하나의 주소에 존재한다. (동일한 주소로 변수 참조)

   - 다시말해, 여러번 생성 될 때 마다 메모리에 로딩되지 않고 한번만 한 곳에 로딩된다.

 

ㅇ static 변수는 객체가 생성(new)되기 전에 별도의 메모리 공간에 할당되어 초기화 된다.

 

ㅇ static 변수는 클래스가 생성(new)되지 않더라도 정의만 되어도 접근가능하다.

 

ㅇ static 변수가 초기화 되는 시점은 JVM에 의하여 클래스가 메모리 공간에 올라가는 순간이다.

   - 일반 변수는 객체가 new되는 시점에 메모리에 로딩된다는 점과 차이
   - static변수는 생성자를 통하여 초기화 하면 안됨

 

ㅇ 객체간 데이터 공유가 필요한 상황에서는 static변수를 선언한다.

 

ㅇ 클래스 내부/외부에서 참조의 용도로만 선언된 변수는 static final로 선언된다.

 

ㅇ static 메소드 내에서는 일반 객체 변수를 사용할 수 없다.
   - static 메소드를 호출할 때 객체가 생성되어 있지 않을수도 있기 때문이다.
   - 다시말해, new되어 변수가 메모리에 로딩되지 않은 시점 일 수도 있다는 말이다.

 

ㅇ static변수는 지속적으로 메모리에 유지된다.
   - 일반 변수는 메소드에서 사용되고 나면 자동으로 소멸되는것과 비교

 

ㅇ static 메소드는 컴파일시 early-binding되기 때문에 실행시 바인딩(late-binding)되는 객체 메소드 보다 빠르다.
   - 컴파일시 이미 호출될 함수가 결정되기 때문에 실행시에 호출되는 함수를 찾아서 결정하는 시간을 줄일 수 있다.

 

자주 변하지 않는 일정한 값이나 설정 정보 같은 공용자원에 대한 접근에 있어서 매번 메모리에 로딩하거나 값을 읽어 들이는것 보다 일종의 메모리 차지공간도 줄이고 효율도 높일 수 있다.

static으로 선언된 클래스 변수나 메소드는 객체의 변수가 아니라 클래스의 변수가 된다.
클래스의 변수라 함은 어떠한 객체라도 동일한 주소로 해당 변수를 참조할 수 있다.
반대로 객체의 변수라고 하면 매번 new될때 마다 참조 주소가 달라진다.

일반적으로 클래스의 변수나 메소드는 클래스가 인스턴스화(new) 되기 전에는 사용 할 수 없는데
static으로 선언된 변수나 메소드는 해당 클래스의 인스턴스 여부와 상관없이 바로 접근/사용가능

 

싱글톤(singleton)
클래스를 private로 선언하면 클래스 객체를 new로 생성할 수 없다.
public static으로 선언한, 객체를 리턴하는 getInstance()와 같은 메소드를 통해서만 객체 접근 가능
public static MyClass getInstnace()
{
if(classInstance == null)
classInstance = new MyClass();
return classInstance;
}

싱글톤 방식은 프로젝트에서 DB연결 등의 공용자원 접근에 이런 static적용을 통해 안전성을 높임
변하지 않는 값을 final static으로 선언하면 GC(Gabage Collection) 대상이 되지 않음

 

 

by wisegirl 2013. 3. 14. 17:24

요즘 개인적인 공부와 프로젝트 진행으로 공부할 곳을 많이 찾아 다닙니다.

제 의지가 약해서 인지 집에선 왠지 몰입이 잘 안되더라구요, 춥기도 하고 ㅎㅎ

그래서 집근처 또는 교통이 편하면서 공부하기 좋은 북까페를 많이 찾고 있어요.

앞으론 제가 다닌 북까페들 중 괜찮았던 곳들 여기다 기록해 볼까 해요~

 

우선 가장 최근에 알게된 홍대 지하철역 근처 '카페꼼마 2페이지'를 소개합니다.

카페꼼마 2page 라는 이름에서도 유추하셨겠지만 2호점 입니다.

1호점은 저도 아직 못가봤어요~ 지하철역에서 좀 거리가 있고 제 동선이랑은 좀 맞지 않더라구요.

 

우선 사진부터 나갑니다.

 

 

 

 

높은 천장, 통유리, 벽면을 가득 채운 책장.

분위기 너무 좋았어요. 게다가 잔잔한 음악까지도 좋았구요.

정리한 내용 아래와 같습니다.

 

ㅇ교통: ★★★★★

   2호선 홍대입구역 2번출구로 나와서 3분만 걸으면 왼편에 위치, 전 위치가 가장 마음에 들어요!!

ㅇ소음: ★★★☆☆

   스타벅스 정도의 적당한 소음이에요, 이어폰 끼면 조용한 정도구요.

   전 너무 조용한것 보다 적당히 소음이 있는게 덜 부담스럽고 좋아요.ㅎㅎ

ㅇ가격: ★★★☆☆

   아메리카노 한잔 4500원 정도로 가격은 좀 비싸지만 북까페 치고는 저렴한것 같아요.

   그리고 모든 메뉴 1000원으로 아메리카노 리필이 가능한 점도 메리트죠.

 

아래 위치 참고하세요^^

by wisegirl 2013. 3. 13. 11:13

2tier client/server모델: clint 와  server가 일대일로 연결하는 방식
3tier 모델: 클라이언트-응용서버-데이터서버 연결방식

소켓의 기본이해 (자바 네트워킹과 동일함)

//서버쪽
ServerSocket serverSocket = new ServerSocket(5001);
while()
 Socket socket = serverSocket.accept();
 ObjectInputStream instream = new ObjectInputStream(socket.getInputStream());

 //스트림으로 들어오는 input데이터, socket으로 부터
 String inStr = instream.readUTF();
 System.out.println("result: " + inStr);

 ObjectOutputStream outstream = new ObjectOutputSteam(socket.getOutputStream());
 outstream.write("from server: "+ inStr);
 outstream.flush();

 

//클라이언트 쪽
Socket socket = new Socket("localhost", 5001);

ObjectOutputStream outstream = new ObjectOutputSteam(socket.getOutputStream());
outstream.write("Hello");
outstream.flush();

ObjectInputStream instream = new ObjectInputStream(socket.getInputStream());

//스트림으로 들어오는 input데이터, socket으로 부터
String inStr = instream.readUTF();
System.out.println("result: " + inStr);

자바와 안드로이드 차이점은 메인UI 접근제한으로 핸들러를 이용한다는 점

서버는 일반 소켓서버를 쓰면 된다. 어차피 소켓 프로토콜이므로,

by wisegirl 2013. 3. 13. 10:54