request로 전송하거나 받을시 request, session, page , application 순으로 읽을 수 있습니다.


el ( Expression Language )태그를 사용시 넘어 오는 id 값만으로 받아 올 수 있습니다

${id}          라고 선언시 id 라는 값을 el태그로 사용하여 받아오는 것이고


${sessionScope.id}    는 바로 session 으로 접근하여 id를 읽는 것 ( 동일한 id가 있을 시 겹치지 않기 위해)


블로그 이미지

김진리

,

el 태그 ${}

개발자/Java 2013. 3. 5. 15:09

 변수를 찾는 방식이, page에서 requset, session, application 등등 순으로 해당 영역에 없으면 차츰 넓은 범위의 의 Scope 객체에서 검색할 수 있고  ex) sessionScope.변수

또한 ${} 를 사용할 때 세션에서 찾으라고 직접적으로 지정해줄 수도 있다.

블로그 이미지

김진리

,

Object 소켓 서버.zip


클라는 압축파일안에.


package PC;


import java.io.IOException;

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;


public class ChatServer {


public static void main(String[] args) throws IOException{

int i=1;

ServerSocket sSocket = new ServerSocket(3000);

System.out.println("PC방 개업 시작...");

while(true){

ObjectInputStream ois = null;

ObjectOutputStream oos = null;

Socket socket = sSocket.accept();

System.out.println(socket + "손님 입장");

oos = new ObjectOutputStream(socket.getOutputStream());

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


ChatRunner cr = new ChatRunner(socket,ois,oos,i);

cr.start();

i++;

}

}

}





package PC;


import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.util.ArrayList;


public class ChatRunner extends Thread {

private boolean flag = false;

private Socket socket = null;

private Data data = null;

private int client=0;

private int count=0;


ObjectInputStream ois = null;

ObjectOutputStream oos = null;

public ChatRunner(Socket socket,ObjectInputStream ois, ObjectOutputStream oos, int client) throws IOException {

this.socket = socket;

this.ois = ois;

this.oos = oos;

this.client = client;

}


public void run() {

try {


while (!flag) {

// 가격 리스트 측정

ArrayList<String> glist = new ArrayList<String>();

ArrayList<String> flist = new ArrayList<String>();

int[] gamemoney = new int[10];

int[] foodmoney = new int[10];

glist.add("서든어택");    gamemoney[0]=2000; glist.add("리니지"); gamemoney[1]=3000;

glist.add("LOL");      gamemoney[2]=4000; glist.add("넷마블"); gamemoney[3]=1500;

glist.add("스타크래프트");  gamemoney[4]=1000;

flist.add("피자");  foodmoney[0]=12000; flist.add("냠냠과자"); foodmoney[1]=1000;

flist.add("햄버거");  foodmoney[2]=6000; flist.add("짜장면");   foodmoney[3]=5500;

flist.add("뽀글이");    foodmoney[4]=2200;

// Data Object에 가격 셋팅 하기

data = new Data();

data.setClientNum(client);

data.setCount(-1);

data.setGame(glist);

data.setGamemoney(gamemoney);

data.setFood(flist);

data.setFoodmoney(foodmoney);

if(count==0){

oos.writeObject(data);

System.out.println(client + " : 번 손님의 PC 실행!");

count++;

}

else{

flag=true;

}

}

data = (Data)ois.readObject();

int time = data.getTotaltime();

int money = data.getTotalmoney();

int num = data.getClientNum();

System.out.println(num +" 의 손님의 총 플레이시간  : " + time + " 총 금액 : " + money);

System.out.println("안녕히가세요!");

oos.close();

ois.close();

socket.close();

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}



블로그 이미지

김진리

,

st1 = "abcd";

st2 = "abcd";


두개의 메모리 주소는 st1가 생성하였던 메모리 주소에 그대로 st2 를 가리키게 된다.

원리는 java의 jvm 이 전에 생성하였던 변수정보를 한번 읽어서 다시 분배 하기 때문에 같은 메모리를 가르키게 된다


st1 = new String("abcd");

st2 = new String("abcd");


는 인스턴스화 되어서 heap 영역에 st1 st2 각자 메모리가 생성되므로 같은 주소를 가르키지 않게 된다.

'개발자 > Java' 카테고리의 다른 글

el 태그 ${}  (0) 2013.03.05
Object 직렬화를 사용한 통신  (0) 2013.02.13
Java 제너릭 사용 예제  (0) 2013.01.30
TreeMap 구현 분석  (0) 2013.01.29
Access Constrol ( 접근제어 ) 3가지  (0) 2013.01.28
블로그 이미지

김진리

,

package This;

import java.util.Date;
import java.util.Vector;

class thisM<T>{

 public void action(T param) {
  if(param instanceof String){
   System.out.println((String)param);
  }
  else if(param instanceof Integer){
   System.out.println((Integer)param);
  }
  else{
   System.out.println((Date)param);
  }
 }
}

class thisMain {
 public static void main(String[] args) {

  Vector v = new Vector();
  v.addElement(new String("Hello"));
  v.addElement(new Integer("155"));
  v.addElement(new Date());

  Object obj = v.elementAt(0);
  thisM a = new thisM();
  a.action(obj);
  
 }


}

제너릭을 사용하면 사용하는 자료형을 몰라도 parameter 값으로 돌려줄 수 있다.

자바는 사기.

 

'개발자 > Java' 카테고리의 다른 글

Object 직렬화를 사용한 통신  (0) 2013.02.13
Java 변수 메모리가 가르키는 위치  (0) 2013.02.12
TreeMap 구현 분석  (0) 2013.01.29
Access Constrol ( 접근제어 ) 3가지  (0) 2013.01.28
Constructor  (0) 2013.01.28
블로그 이미지

김진리

,

 

treemap.zip

public class AccountManagementTreeMap {
 private TreeMap<AccountNumber, AccountTreeMap> accounts;
 //TreeMap 을 사용하여 Key값에는 AccountNumber 클래스를 Value 에는 AccountTreeMap 클래스를 
 public AccountManagementTreeMap() {
  accounts = new TreeMap<AccountNumber, AccountTreeMap>(
    new AccountNumber());
 }
 // AccountNumber을 Comparator에 사용하기 위해 new를 생성하여 객체를 집어 넣는다.

 public void insertAccount(float money, String accountNumber,
   String accountName) {
  accounts.put(new AccountNumber(accountNumber), new AccountTreeMap(
    money, accountNumber, accountName));
 //Treemap 구조인 hash 에 갑을 넣기 위해put 을 사용하며 AccountNumber클래스 안에 있는
 //accountNumber을 사용해야 하기 때문에 new AccountNumber을 사용하여 생성자 값 리턴을 한다.
 }

 public void setDeposite(float money, String accountNumber) {
  if (accounts.containsKey(accountNumber)) {
   //accounts 에 존재하는 key값을 accountnumber로 찾는다.
   AccountTreeMap account = accounts.get(accountNumber);
   //찾은 value 를 가져오기 위해 key값을 저장 하고 money를 저장한다.
   account.deposite(money);
   return;
  }
  System.out.println("there is no account");
 }

 public void setWithdraw(float money, String accountNumber) {
  if (accounts.containsKey(accountNumber)) {
   AccountTreeMap account = accounts.get(accountNumber);
   account.withdraw(money);
   return;
  }
  System.out.println("there is no account");
 }

 public void displayAll() {

  Iterator ir = accounts.keySet().iterator();
  //accounts 의 키값을 저장 next next 하기위해 Iterator사용
  while (ir.hasNext()) {
   AccountNumber accountNumber = (AccountNumber) ir.next();
   // Key 값인 AccountNumber를 key 값으로 저장 하기 위해 accountNumber로 선언
   AccountTreeMap account = accounts.get(accountNumber);
   // AccountTreeMap을 account 변수로 선언 하여 key 주소를 가져옴   
   System.out.println(account);
  }
 }

}


public class AccountNumber implements Comparator{
 //key 값으로 사용하는 class
 String accountNumber;
 
 public AccountNumber() {}
 //정렬을 할 객체를 사용할때의 생성자
 public AccountNumber(String accountNumber2) {
  // TODO Auto-generated constructor stub
  accountNumber = accountNumber2;
  //AccountNumber 의 key를 리턴하기 위해 만든 생성자
 }


 @Override
 public int compare(Object o1, Object o2) {
  // TODO Auto-generated method stub
  String ac1  = (((AccountNumber)o1).accountNumber).toString();
  String ac2  = (((AccountNumber)o2).accountNumber).toString();
  
  //Obejct를 다운캐스팅 하여 AccountNumber 로 변환 그리고 accountNumber변수를 사용한다.
  
  return ac1.compareTo(ac2);
  }

}


public class AccountTreeMap {
 private float balance;
 private String accountNumber;
 private String accountName;
 
 public AccountTreeMap(){}
 public AccountTreeMap(float balance, String accountNumber, String accountname){
  this.balance = balance;
  this.accountNumber = accountNumber;
  this.accountName = accountname; 
 }
 
 public void withdraw(float amount){
  if(amount > balance){
   System.out.println("not enough money");
  }
  else
   balance -=amount;
 }
 public void deposite(float amount){
  if(amount <= 0){
   System.out.println("입금불가");
  }
  else
   balance += amount;
 }
 
 public float getBalance() {
  return balance;
 }

 public String getAccountNumber() {
  return accountNumber;
 }

 public String getAccountName() {
  return accountName;
 }
 public String toString(){
  return accountName + "님의 현재 계좌번호는" + accountNumber +
    "이며, 현재 잔고는" + balance + "입니다";
 }

}

 


 

 

 

'개발자 > Java' 카테고리의 다른 글

Java 변수 메모리가 가르키는 위치  (0) 2013.02.12
Java 제너릭 사용 예제  (0) 2013.01.30
Access Constrol ( 접근제어 ) 3가지  (0) 2013.01.28
Constructor  (0) 2013.01.28
Class 와 메모리  (0) 2013.01.27
블로그 이미지

김진리

,

Public  -  멤버에 직접 접근 가능

Private -  멤버함수를 통해서만 접근 가능

              -  자료를 직접 access 못하도록 하여 자료를 보호

              -  내부적으로만 사용하는 경우

Protected - 상속관계에 있어서만 Public 접근 가능

                  - 외부 객체에서는 access 할 수 없지만, 상속관계에서는 public 처럼 사용 가능

 

접근제어의 종류

             - 객체를 이용한 멤버의 접근제어

             - 상속관계에서 상위 클래스와 하위 클래스간의 접근제어

 

'개발자 > Java' 카테고리의 다른 글

Java 제너릭 사용 예제  (0) 2013.01.30
TreeMap 구현 분석  (0) 2013.01.29
Constructor  (0) 2013.01.28
Class 와 메모리  (0) 2013.01.27
Virtual Machine  (0) 2013.01.26
블로그 이미지

김진리

,

Constructor

개발자/Java 2013. 1. 28. 00:44

Constructor - 생성자

Constructor의 정의 - 객체의 생성과 동시에 자동으로 호출되는 메서드

디폴트 생성자 ( Default Constructor) - 생성자가 없는 클래스를 위해서 컴파일러는 매개변수를 가지지 않는 디폴트 생성자를 자동으로 만들어 준다.

 

디폴트 생성자의 예

 

 

Constructor 의 예

생성자의 특징

     - 생성자는 리턴타입 ( Return Type) 이 없다   ex) void, int , String ....

     - 생성자의 이름은 클래스의 이름과 동일하다.

     - 생성자는 객체의 메모리가 생성된 직후에 호출된다.

     - 생성자는 마음대로 호출할 수 없다.

 

'개발자 > Java' 카테고리의 다른 글

TreeMap 구현 분석  (0) 2013.01.29
Access Constrol ( 접근제어 ) 3가지  (0) 2013.01.28
Class 와 메모리  (0) 2013.01.27
Virtual Machine  (0) 2013.01.26
Java란?  (0) 2013.01.20
블로그 이미지

김진리

,

Class 와 메모리

개발자/Java 2013. 1. 27. 23:53

클래스를 이용한 메모리의 생성

     - 클래스는 데이터 타입으로 변수를 선언하고, 컴퓨터 내의 메모리 속에 데이터 타입에 해당하는 만큼 메모리를 확보하는 일

◆ 객체( Object )

    - 클래스로 변수를 만들었을 때 일반적인 기본 데이터 타입의 변수와 구별하기 위해서 객체 또는 객체 변수라고 한다.

new 연산자

    - 객체의 메모리를 생성시켜 주는 역할을 담당

 

UnitedData d;        // 이름 선언뿐

UnitedData d = new UnitedData();     // 이름과 메모리를 가짐

 

'개발자 > Java' 카테고리의 다른 글

TreeMap 구현 분석  (0) 2013.01.29
Access Constrol ( 접근제어 ) 3가지  (0) 2013.01.28
Constructor  (0) 2013.01.28
Virtual Machine  (0) 2013.01.26
Java란?  (0) 2013.01.20
블로그 이미지

김진리

,

Virtual Machine

개발자/Java 2013. 1. 26. 17:17

Java 가 실행되기 위해서 필요한 Machine

가상머신 ( Virtual MAchine )

    - 바이트 코드를 해석한 후 실행하는 시스템   

바이트 코드 (Byte Code)   : .java 파일을 컴파일할 때 만들어지는 .class 파일

                                         완전한 기계어가 아닌 중간 단계의 언어


자바의 특징

컴파일 하면 바이트 코드로 컴파일되는 컴파일 언어.

바이트 코드를 해석해서 실행하는 인터프리터 언어.

바이트 코드를 해석해주는 가상머신만 있다면 어떠한 환경에서도 동작한다.


가비지 콜렉터( Gabage Collector ) - new(); 로 생성한 객체를 heap 메모리에서 해제 하게 해준다. (주기적으로 실행된다) 

힙에서 생성되는 객체의 메모리만 해제해준다.

'개발자 > Java' 카테고리의 다른 글

TreeMap 구현 분석  (0) 2013.01.29
Access Constrol ( 접근제어 ) 3가지  (0) 2013.01.28
Constructor  (0) 2013.01.28
Class 와 메모리  (0) 2013.01.27
Java란?  (0) 2013.01.20
블로그 이미지

김진리

,