'개발' 카테고리의 다른 글
이클립스정보 [불펌] (0) | 2013.10.16 |
---|
이클립스정보 [불펌] (0) | 2013.10.16 |
---|
Class.class에 대한 나의 생각.
Class 클래스가 있습니다.
저 처음에 자바 공부 할 때 이 클래스는 도대체 뭔가???? 했었습니다.
String.class 라는 것이 코드 속에 나오는 것도 엄청 신기했습니다.
String.class는 파일로만 존재하는 것인 줄 알았었습니다.
Class 클래스는 무엇일까요.
Java의 OOP를 얘기 할 때 나오는 얘기 중 가장 많이 나오는 것이..
클래스를 만들어 틀을 만들어 놓고 , 이 틀을 사용해 인스턴스를 찍어낸다(?)라는 것입니다.
public class User { private String name; private int regstNum; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setRegstNum(int regstNum) { this.regstNum = regstNum; } public int getRegstNum() { return regstNum; } @Override public boolean equals(Object o) { User u2 = (User)o; if(regstNum == u2.getRegstNum()) return true; else return false; } }
위 처럼 User 클래스를 만들어서 틀을 만들고
User jang = new User(); jang.setName("장"); User kim = new User(); kim.setName("김");
이렇게 인스턴스를 만들어냅니다. 이때 생성 된 User 클래스의 인스턴스들은
모두 이름,주민번호라는 필드와 getName, setName등의 메서드들을 가지고 있게 됩니다.
데이터와 행동을 가지고 있는 것이지요.
이처럼 User에서 만들어지는 객체들이 가져야 할 것들을 정의 하고 있는 것이 User 라는 클래스입니다.
그러면 한단계만 더 위로 올라가보면..
User라는 클래스는 필드와 메서드를 가지고 있습니다.
물론 클래스에는 더 많은 속성들이 존재하지만 일단 논외로 두고요..
일단 필드와 메서드만을 놓고 봤을 때
이렇게 만든 User라는 클래스 즉, User.class도 필드와 메서드를 가지고 있고
java의 기본 클래스인 String.class도 필드와 메서드를 가지고 있는 것이지요.
즉, Java에서 사용되는 Class들에 대한 정의를 하고 있는 틀이 Class.class 입니다.
Java Api 문서에는
Class
represent classes and interfaces in a running Java application. Every array also belongs to a class that is reflected as a Class
object that is shared by all arrays with the same element type and number of dimensions. Class 클래스의 객체는 자바 프로그램에서 사용되는 클래스들과 인터페이스들을 나타낸다고 되어 있습니다.
Class.class가 가지고 있는 메서드를 조금 보면 이해가 더 되시리라 생각됩니다.
일단, static으로 되어 있는 forName 메서드가 있습니다.
jdbc 예제에서 많이 나오는 메서드로... Class.forName("java.lang.String"); 으로 실행하면
해당 이름을 갖는 클래스(String)의 정보를 담은 Class instance를 리턴해줍니다.
public class ClassTest { private Log logger = LogFactory.getLog(ClassTest.class); public static void main(String[] args) throws ClassNotFoundException { Class clazz = Class.forName("java.lang.String"); System.out.println("class name : " + clazz.getName()); Method[] methods = clazz.getDeclaredMethods(); for(Method method : methods) { System.out.println("method : " + method.getName() + "modifier : " + method.getModifiers() +
"return type : " + method.getReturnType()); } } }
java.lang.String 클래스의 정보를 가지고 있는 클래스 인스턴스를 얻어서
이름과 메서드에 대한 정보를 출력하는 예제입니다.
이러한 것이 가능한 이유는 자바에서 사용되는 모든 클래스들은 공통된 속성을 가지고 있고 (필드, 메서드등.)
그 속성을 정의하고 있는 것이 Class 클래스이기 때문입니다.
Class 클래스의 객체는 많은 메서드들을 가지고 있습니다. 모두 클래스에 대한 메서드들입니다.
어노테이션,생성자,필드등도 가져 올 수 있고
이것을 사용하여 리플렉트로 객체를 생성 할 수도 있고 상위 클래스들을 가져 올 수도 있습니다.
메서드를 실행 할 수도 있습니다.
new String(); 을 하지 않아도 위 처럼 그 String 클래스가 가진 메서들을 가지고 올 수도 있고
객체도 얻을 수 있고, 메서드를 실행 할 수도 있습니다.
우리가 만든 User 클래스의 객체들은 모두 이름과 주민번호를 갖는다. 라는 것과 비교해보면
좋을 것 같습니다.
결국 Class 클래스를 이용해서 우리가 다루는 모든 클래스에 대한 정보들을 얻어 올 수 있습니다.
걍 뻘짓. (0) | 2013.10.22 |
---|---|
쓰레드를 이용한 채팅 프로그램 예제문 (0) | 2013.10.17 |
다중 소켓 관리(접속자인원 멀티로) (1) | 2013.10.17 |
elementAt(); 메소드 사용법 (0) | 2013.10.17 |
class Ralf{
String Clark;
Ralf(String Clark){this.Clark=Clark;}}
class Guise extends Ralf{Guise(){super("떢을내뿜케");}}
class Mai extends Ralf{Mai(){super("몽고리안!");}}
class kof{public static void main(String[] args)
{ Ralf r=new Guise();
System.out.println(r.Clark);
Class aClark=r.getClass();
System.out.println(aClark.getName());
System.out.println("==========================");
Ralf r1=new Mai();
System.out.println(r1.Clark);
Class bClark=r1.getClass();
System.out.println(bClark.getName());}}
음?!
class 란...무엇인가... (0) | 2013.10.22 |
---|---|
쓰레드를 이용한 채팅 프로그램 예제문 (0) | 2013.10.17 |
다중 소켓 관리(접속자인원 멀티로) (1) | 2013.10.17 |
elementAt(); 메소드 사용법 (0) | 2013.10.17 |
[JSP]getContextPath()와 getRequestURI(), request.getRealPath("/")의 차이 JSP 2009/12/16 20:33
---퍼옴, -> http://finewoo.tistory.com/18
http 와 https 의 차이 (0) | 2013.10.18 |
---|
웹 서핑없는 PC생활은 상상하기 어려운 시대,
알툴즈 웹 개발팀장이 들려주는
인터넷과 개인정보 보호 이야기
한번 들어보시겠어요?
함께 알아보는 https
안녕하세요? 알툴즈 웹개발팀장 덩지니입니다.
웹(Web)이라는 말은
1994년 미국의 MIT 대학에서
W3C (World Wide Web Consortium: http://www.w3.org/ 월드와이드웹 컨소시움)이
출범하면서 사용되었답니다.
인터넷(Internet)이라는 용어는
전세계를 망라하는 거대한 통신망의 집합체, 즉 하드웨어 구성을 말하며,
웹은 이러한 인터넷을 이용하는 하나의 방법이죠.
우리는 이러한 인터넷 덕분에 이전엔 상상도 못할만큼 엄청난 정보를 얻고 있답니다.
검색이라던지, 데이터의 보관, 친구들과의 놀이터로도 이용이 되죠 ^-^
예를 들어 여러분께서 인터넷 익스플로어 또는 파이어 폭스와 같은 브라우져에
www.altools.com 이라는 주소를 입력하면,
브라우져는 인터넷이라는 온세계를 망라하는 거대한 기계 집합체에
접근하게 된답니다.
인터넷을 거쳐 서버에 데이터를 요청하는데요.
서버는 www.altools.com에 대한 데이터를 실제로 제공해주는 기계에요.
그럼, 이 요청을 받은 서버에서 역시 인터넷을 통해 응답을 해 줍니다.
이렇게 여러분의 PC에 데이터가 오면
브라우져 화면에 나오는 거죠.
내 PC 브라우저에서 요청 > 인터넷 > 서버 > 인터넷 > 내 PC 브라우저에 출력
이렇게 통신하자고 정한 약속을 http 프로토콜이라고 부르고 있습니다.
그런데...
실상 우리는 인터넷을 너무나 안일하게 사용하고 있어요.
한마디로 개인 정보가 무방비로 노출되는 무서운 세상인데
전혀 인지를 못하고 있습니다.
악의적인 의도를 가진 크랙커(쉽게 설명하면 나쁜 해커) 들이 마음만 먹으면
인터넷이라는 거대한 하드웨어의 집합체에 숨어서
지나가는 데이터의 요청을 몰래 훔쳐보거나 바꾸거나 복제할 수 있는 상황이예요.
즉, 일반적인 http 웹사이트에서 아이디와 비밀번호를 입력하는 것은
내 아이디와 비밀번호를 세상 모두에게 공개하는 것과 다를 것이 없다는 이야기죠 ^^;
특히 노트북에서 로그인 등을 하는 경우에는 인터넷이라는 숲에 숨지 않아도
옆에서 공중에 있는 데이터를 몰래 볼 수 있기 때문에 더욱 위험하답니다.
그래서 https 라는 것이 등장했어요.
https에서는 데이터를 전달할 때
공개키와 비밀키에 기반한 암호화를 거치므로
사용자의 데이터를 안전하게 숨겨준답니다.
인터넷에서 해커가 데이터를 몰래 훔쳐볼 수 없으니
자신의 정보를 안전하게 지킬 수 있게 되는 것이죠.
일반적으로 아이디와 패스워드를 전달해주는 로그인 같은 경우
https로 보호해주는 사이트들은 많지만,
로그인과 같은 경우는 대부분 https로 데이터를 던지고
즉시 http로 돌아오기 때문에,
https로 가는지 어떻게 아는지 궁금하실 것 같아요 ^^
주소창에 https라고 뜨거나 로그인창 아래에 “보안접속”과 같은 메뉴가 있다면
"내 정보가 보호되고 있구나”라고 생각하시면 돼요. ^^
그래서 이번에 알툴즈 웹사이트 개편하면서
개인정보에 관련한 모든 부분을 https로 바꾸었답니다 ^-^
알씨 온라인 사이트도 마찬가지구요.
이 무서운 세상, 본인의 소중한 정보는 아무도 지켜주지 않는답니다.
민주주의를 투쟁의 역사에서 쟁취한 것처럼
누가 보호해주겠거니 생각하지 마시고,
자신의 정보는 스스로 지켜주세요 ^_^
지키는 방법!
인터넷에 연결할 때 보안/백신 프로그램 꼭 실행하시고
검증 안된 사이트에 회원가입이나 로그인하지 마시구요.
윈도우 업데이트나 백신 프로그램 업데이트도 빼먹지 말고
꼬박 꼬박 해주시면 됩니다.
[출처] http 와 https 의 차이가 뭘까요? |작성자 알툴즈
[JSP]getContextPath()와 getRequestURI(), request.getRealPath("/")의 차이 (0) | 2013.10.18 |
---|
클래스
ClientThread - 클라이언트 측 사용자 정의 스레드 클래스. 서버에서 전송한 문자열을 읽는 역할을 한다.
ServerThread - 서버 측 사용자 정의 스레드 클래스. 클라이언트에서 전송한 문자열을 다시 전송하는 역할을 한다.
SimpleClient - 클라이언트 클래스. ClientThread를 Start 시키고, 사용자로부터 문자열을 입력받아 서버로 전송하는 역할을 한다.
SimpleServer - 서버 클래스. ServerThread를 Start 시키고, 클라이언트의 접속을 기다리는 역할을 한다.
소스
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread implements Runnable{
private String clientID = null;
private Socket socket = null;
private BufferedReader br = null;
private PrintWriter out = null;
public ServerThread(Socket socket){
this.socket = socket;
}
public void joinClient() {
try{
clientID = br.readLine();
if(clientID==null||clientID.equals(" ")) {
clientID = "손님_" + Math.random();
}
}catch(IOException ioe) {
}finally{
SimpleServer.addClient(this);
String msg = SimpleServer.msgKey + clientID + "님이 입장하셨습니다.";
SimpleServer.broadCasting(msg);
System.out.println(msg);
}
}
public void exitClient() {
SimpleServer.removeClient(this);
String msg = SimpleServer.msgKey + clientID + "님이 퇴장하셨습니다.";
SimpleServer.broadCasting(msg);
System.out.println(msg);
}
//클라이언트와 연결된 출력스트림을 통해 출력하는 메소드
public void sendMessage(String message){
out.println(message);
}
public void run(){
try{
//1. 소켓을 통해 스트림 생성(Input, Output)
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
joinClient();
//2. 클라이언트가 보낸 글을 읽어 들인다.
String str = br.readLine();
String strResult = null;
while(str!=null) {
//3. 클라이언트가 보낸 글이 있는 동안 SimpleServer의 broadCasting()메소드를 통해 연결된 모든 클라이언트들에게 글을 전송한다.
strResult = SimpleServer.broadCasting(clientID, str);
System.out.println(strResult);
str = br.readLine();
}
}catch (IOException e) {
// e.printStackTrace();
}finally{
//4. io, socket 연결을 종료한다.
if(br!=null) {
try{br.close();}catch(IOException ioe){}
}
if(out!=null) {
out.close();
}
if(socket!=null) {
try{socket.close();}catch(IOException ioe){}
}
//5. SimpleServer의 removeClient() 를 통해 자기 자신을 대화대상에서 제거 한다.
exitClient();
}//end of finally
}
}
--------------------------------------------------------------------------------import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class SimpleServer{
public static final String msgKey = "알림) ";
//연결된 클라이언트들의 정보를 저장하는 ArrayList - 대화대상목록(List)
private static ArrayList<ServerThread> list = new ArrayList<ServerThread>();
//private static HashMap<String, ServerThread> map = new HashMap<String, ServerThread>();
//클라이언트를 대화대상목록에서 제거하는 메소드
//ServerThread에서 클라이언트와 연결이 종료될 때 호출한다.
public static void removeClient(ServerThread st){
list.remove(st);
}
//연결한 클라이언트를 대화대상목록에 추가하는 메소드
//클라이언트와 연결될때 호출된다.
public static void addClient(ServerThread st){
list.add(st);
}
//대화대상목록의 모든 클라이언트들에게 인수로 받은 글을 전송하는 메소드
//클라이언트가 보낸 메세지(글)이 있을때 ServerThread로 부터 호출된다.
public static void broadCasting(String message){
ServerThread st = null;
for(int i=0; i<list.size(); i++) {
st = list.get(i);
st.sendMessage(message);
}
}
public static String broadCasting(String clientID, String message){
String sendMSG = clientID + ": " + message;
ServerThread st = null;
for(int i=0; i<list.size(); i++) {
st = list.get(i);
st.sendMessage(sendMSG);
}
return sendMSG;
}
public static void main(String args[]) {
ServerSocket ss=null;
Socket socket = null;
int i=0;
try{
System.out.println("<Lee Wan-Geun's Simple Chatting Server>");
//1. server 소켓생성
ss = new ServerSocket(5000);
while(true) {
//2. 클라이언트의 연결을 무한 반복하며 기다린다.
System.out.println(msgKey + "클라이언트 연결을 대기 중입니다.");
socket = ss.accept();
//3. 클라이언트가 연결되면 ServerThread를 생성한 뒤 Thread로 실행시킨다.
ServerThread st = new ServerThread(socket);
Thread t = new Thread(st);
t.start();
//4. 연결된 클라이언트의 정보(ServerThread)를 대화대상목록(ArrayList)에 추가 시킨다.'
// ServerThread에서 추가
}
}catch(IOException ioe){
ioe.printStackTrace();
}finally{
if(socket!=null) {
try{socket.close();}catch(IOException ioe){}
}
}
}//end of method
}
--------------------------------------------------------------------------------
import java.net.Socket;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ClientThread implements Runnable
{
Socket socket = null;
public ClientThread(Socket socket) {
this.socket = socket;
}
public void run() {
if(socket!=null) {
BufferedReader br = null;
try{
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = br.readLine();
while(str!=null) {
System.out.println(str);
str = br.readLine();
}
System.out.println(">>> Client Thread end");
}catch(IOException ioe){
// ioe.printStackTrace();
}finally{
if(br!=null) {
try{br.close();}catch(IOException ioe){}
}
if(socket!=null){
try{socket.close();}catch(IOException ioe){}
}
}
}
else {
System.out.println("Client Socket is null");
}
}
}
--------------------------------------------------------------------------------
import java.net.*;
import java.io.*;
public class SimpleClient { public static String enterName(BufferedReader br, PrintWriter out) {
String str = null;
try{
System.out.print("대화명 입력: ");
str = br.readLine();
out.println(str);
}catch(IOException ioe) {
ioe.printStackTrace();
}
return str;
} public static void main(String[] args) {
Socket socket = null;
BufferedReader keyboard = null;
PrintWriter out = null;
try{
// 1. 서버와 연결 작업을 처리 - socket 생성
socket = new Socket("127.0.0.1", 5000);
// 2. 서버가 보낸 글을 읽는 ClientThread 객체 생성, 실행
ClientThread ct = new ClientThread(socket);
Thread t = new Thread(ct);
t.start();
// 3. 키보드로 부터 글을 읽고 서버에 전송.
keyboard = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(), true);
enterName(keyboard, out);
String str = keyboard.readLine();
while(str!=null){
out.println(str); // 서버 전송
str = keyboard.readLine(); // 키보드에서 읽기
}
}catch(IOException ioe){
ioe.printStackTrace();
}finally{
// 4. 스트림과 소켓의 연결을 끊는다.
if(keyboard!=null) {
try{keyboard.close();}catch(IOException ioe){}
}
if(out!=null) {
out.close();
}
if(socket!=null) {
try{socket.close();}catch(IOException ioe){}
}
}
}
}
class 란...무엇인가... (0) | 2013.10.22 |
---|---|
걍 뻘짓. (0) | 2013.10.22 |
다중 소켓 관리(접속자인원 멀티로) (1) | 2013.10.17 |
elementAt(); 메소드 사용법 (0) | 2013.10.17 |
import java.net.*;
import java.util.*;
import java.io.*;
class open
{
ServerSocket ss = null;
Socket soc = null;
Vector vc = new Vector();
public open()
{
try{
ss = new ServerSocket(12345);
}catch(IOException ee){}
while(true)
{
try{
System.out.println("서버레디");
soc = ss.accept();
System.out.println(soc.toString());
ServerThread st = new ServerThread(soc);
vc.add(st);
st.start();
}catch(IOException ee){}
}//while end
}// method end// class end
class ServerThread extends Thread //내부클래스
{
Socket soc = null;
Socket inwon = null;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
PrintWriter pw = null;
public ServerThread(Socket soc)
{
System.out.println("ServerThread 생성자 진입");
this.soc = soc;
try{
osw = new OutputStreamWriter(soc.getOutputStream());
bw = new BufferedWriter(osw);
pw = new PrintWriter(bw);
}catch(IOException ee){}
}
public void run()
{
System.out.println("ServerThread run 쓰레드 진입");
pw.println("접속을 환영한다.");
pw.flush();
//현재 접속자 정보 및 인원수
for(int i = 0; i<vc.size(); i++)
{
String strinfo = (String)vc.elementAt(i).toString();
System.out.println(i + "번째 정보" + strinfo);
} //로컬에 출력
print();
}
public void print()
{
for(int i = 0; i<vc.size(); i++)
{
ServerThread st1 = (ServerThread)vc.elementAt(i);
for(int j = 0; j<vc.size(); j++)
{
ServerThread socinfo = (ServerThread)vc.elementAt(i);
String strinfo = socinfo.soc.toString();
st1.pw.println("현재 접속자 실시간 업데이트" + strinfo);
}
st1.pw.flush();
}
}
}
}//end class
public class server1 {
public static void main(String[] arg)
{
new open();
}
}
/*요약
설계 메인클래스, 이너클래스(쓰레드관리클래스)
메인클래스
1.서버소켓 생성
2. 소켓에 서버 어셉트를 던진다. soc = ss.accept();
3. 쓰레드가 포함된 클래스를 생성함과 동시에 soc 전달.
ServerThread st = new ServerThread(soc);
4. 쓰레드 클레스를 Vector에 쳐넣음으로써 Vector를 통한 Thread의 관리가 가능해진다. vc.add(st);
5. 쓰레드 클래스를 백터에 넣었으므로 쓰레드를 스타트시킨다.
이너클래스 - 클래스안의클래스
1. 이너클래스의 전역참조변수로는 소켓을 관리할soc필요.
그리고 나머지는 네트워크 출력을 하면 되겠다.
위의 코딩 참조.
2. ServerThread라는 생성자자를 만들며 매개변수로 Socket soc
를 받아서 this.soc = soc 해버린다.
이너클래스에 soc의 정보를 저장하는거라고 이해하면 된다.
//추가 : Serverthread의 이너클래스에서 soc의 변수 말고
다른 여러가지 정보들을 저장하여 나중에 차례차례 꺼내서 불러 올수 있도록 응용할수 있으니 필요시 응용하자.
예를들어 처음 들어온 사람의 ID가 icwert라면 ServerThread의 생성자 매개변수로 ID라는걸 얻어와 this.id = id 해서 이너클래스 속에 ID값을 저장해 둔 후. 나중에 여러가지로 활용할 수 있을듯 하다.
while - if - id문자열 비교를 통해 맞는 사람에게 특정 메시지를 전송할수 있도록 할수 있다.
머 나머지는 보면 알듯...위의 코드를 만약을 대비하여 카피해놓는다.
*/
역시나 불펌이다. 어디서 펏는지 기억이-_-;
class 란...무엇인가... (0) | 2013.10.22 |
---|---|
걍 뻘짓. (0) | 2013.10.22 |
쓰레드를 이용한 채팅 프로그램 예제문 (0) | 2013.10.17 |
elementAt(); 메소드 사용법 (0) | 2013.10.17 |
import java.util.*
public class VectorDemo2 {
public static void main(String[] args){
Vector vec = new Vector(); //디폴트로 벡터 생성시 초기 저장 사이즈는 10으로 지정
System.out.println("초기 벡터 사이즈 : " + vec.size());
System.out.println("초기 벡터 수용능력 : " + vec.capacity());
vec.addElement(new Integer(100);
vec.addElement(new String("벡터테스트");
vec.addElement(new Date();
vec.addElement(new String("네 번째 데이터");
System.out.println();
for(int i = 0; i < vec.size(); i++){
System.out.println(vec.elementAt(i)); //저장된 데이터의 인덱스를 이용하여 데이터를 얻음
}
}
}
------------ JAVA_Application ----------------
초기 벡터 사이즈 : 0
초기 벡터 수용능력 : 10
100
벡터테스트
Tue May 19 21:34:00 KST 2009
네 번째 데이터
--->http://blog.naver.com/truettl/150084764865 에서 불펌;
class 란...무엇인가... (0) | 2013.10.22 |
---|---|
걍 뻘짓. (0) | 2013.10.22 |
쓰레드를 이용한 채팅 프로그램 예제문 (0) | 2013.10.17 |
다중 소켓 관리(접속자인원 멀티로) (1) | 2013.10.17 |
리팩터링 전의 Person 클래스로 간단하지만 개인 정보와 연락처 정보 관리라는 두 가지 책임을 가진다. Extract Class로 연락처 관리의 책임을 추출할 수 있다.
public class Person { private String name; private String officeAreaCode; private String officeNumber; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOfficeAreaCode() { return officeAreaCode; } public void setOfficeAreaCode(String officeAreaCode) { this.officeAreaCode = officeAreaCode; } public String getTelephoneNumberNumber() { return "( " + officeAreaCode + ") "+ officeNumber; } public String getOfficeNumber() { return officeNumber; } public void setOfficeNumber(String officeNumber) { this.officeNumber = officeNumber; } }
먼저 Extract Class 메뉴를 선택한다. 최상단 메뉴나 <화면 1>과 같이 편집기 의 오른쪽 마우스 컨텍스트 메뉴에서 Refactor -> Extract Class를 선택한다.
Extract Class 메뉴를 선택하면 다음과 같이 설정 다이얼로그가 나온다.
새로운 코드로 리팩터링되었다. 위에서 선택한 두 필드를 가지고 있는 Telephone 클래스가 생성되었고, Person 클래스는 Telephone 클래스의 인스턴스를 필드로 가지고 이를 참조하도록 다음과 같이 변경되었다.
package refactoring; public class Person { private String name; private Telephone telephone = new Telephone(); public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOfficeAreaCode() { return telephone.getOfficeAreaCode(); } public void setOfficeAreaCode(String officeAreaCode) { this.telephone.setOfficeAreaCode(officeAreaCode); } public String getTelephoneNumberNumber() { return "( " + telephone.getOfficeAreaCode() + ") "+ telephone.getOfficeNumber(); } public String getOfficeNumber() { return telephone.getOfficeNumber(); } public void setOfficeNumber(String officeNumber) { this.telephone.setOfficeNumber(officeNumber); } }
package refactoring; public class Telephone { private String officeAreaCode; private String officeNumber; public Telephone() { } public String getOfficeAreaCode() { return officeAreaCode; } public void setOfficeAreaCode(String officeAreaCode) { this.officeAreaCode = officeAreaCode; } public String getOfficeNumber() { return officeNumber; } public void setOfficeNumber(String officeNumber) { this.officeNumber = officeNumber; } }
일상의 습관을 바꾸기 어렵듯이 개발습관 또한 한번 익숙해지면 바꾸기 어렵습니다. 단축키를 활용하는 개발습관은 무엇보다도 개발에 대한 전문성과 생산성에 기여한다고 할 수 있습니다.
[출처] 이클립스 가니메데 활용법|작성자 경구사
진주고용센터 실업자용 c/c++프로그래밍 훈련 (0) | 2013.10.24 |
---|