OOP에서 사용되는 용어를 자유롭게 사용하지만 한마디로 정의하라면 그게 쉽지 않다 그래서 한번 정리해 보도록 하자!

인터페이스(Interface): 

1. 인터페이스 = 기능 = 약속(protocal) -> 기능은 변하지 않는다.

2. 100% 추상클래스(Abstract Class)다.

3. 상수(public static final)와 추상메서드(Abstract method)만을 같는다.(필드 X)

4. 다중 상속이 가능하다.

클래스(Class): 객체의 타입

객체(Object): 

1. 상태(Status)/특성(Characteristic), 오퍼레이션(Operation)/행동(Behaviour), 정체성(Identity)/고유 식별(고유 메모리/힙에 할당)을 같는다. 

2. 클래스의 인스턴스(Instance)이다.

3. 문제 영역의 요소들을 해결 영역에 표현한 것.

is-a 관계: 상속하여 대체 가능한 객체를 만드는 것.

위임(Delegation): 특정일의 책임을 다른 클래스나 메소드에 맡기는 것. (상속의 대안)

참조: http://java.ihoney.pe.kr/24

has-a 관계: 한 객체안에 다른 멤버 객체를 생성하는 것.

1. 구성(Composition)/A owns B: 한 객체가 다른 객체를 구성하고있다.(가지고 있다)

-> 하나의 인터페이스로 구현한 여러 클래스를 사용가능(객체를 서로 바꾸어 쓸 수 있다.)

-> 구성하는 객체의 소멸시 종속된 객체도 같이 사라진다.

2. 집합(Aggregation)/B is part of A: 한 객체가 다른 객체를 참조한다.

-> 참조하는 객체가 소명되도 참조되는 객체는 사라지지 않는다.

참조: http://valley.egloos.com/viewer/?url=http://ryukato.egloos.com/740197 

is-like-a 관계: 상속에서 파생된 객체에 메서드를 추가하면 베이스 타입에서는 사용할 수 없는 것.

오버라이딩(Overriding): 상속에서 슈퍼 클래스의 메서드를 서브 클래스에서 재 정의하는 것.

-> 자바 SE5 버전에서는 @Overrride 주석 태그가 추가되어 오버라이딩 할것을 오버로딩하려면 에러를 낸다.

-.> 오버라이딩을 방지하기위해 상위 클래스에서 final 키워드를 사용하여 메서드를 정의할 수 있다.

오버로딩(Overloading): 같은 메서드 명으로 인자 갯수를 다르게하여 여러 메서드를 생성하는 것.

다형성: 인터페이스와 구현을 분리시켜 확장 가능하고 가독성을 제공한다. late 바인딩으로 가능(동적 바인딩, 런타임 바인딩 이라고도 함)

-> 서로다른 타입의 객체들이 같은 메시지에 대해 제각기 다른 결과를 산출하는 개념

-> 슈퍼 클래스를 이용하는 코드에서 수정없이 서브 클래스를 사용할 수 있다.

업케스팅: 파생 타입의 객체를 베이스 타입으로 참조하는 것

-> 업케스팅은 쉽게 가능 하지만 다운 케스팅은 고려해 봐야 함

캡슐화: 접근 제한 (public, private, protected)

Posted by Brian B. Lee
Programming/Java2011. 6. 2. 14:52
1. 제네릭 클래스
public class ArrayList<E> extends AbstractList<E> implements List<E> ...{
public boolean add(E o)
}
- E(Element): 컬렉션에 저장하고 컬렉션에서 리턴할 원소의 유형 ex) String, int, ...
클래스 생성시 설정해준 E 값으로 클래스 안에서 사용 ex) ArrayList<String> a = new ArrayList<String>;

2. 제네릭 메소드
    
2.1 public <T extends Animal> void takeThing(ArrayList<T> list)
- Animal 클래스의 확장(extends)이나 구현(implements)만 객체로 받을 수 있다.
- public void takeThing(ArrayList<Animal> list) 과 다른 점은 이 메소드의 list 파라미터는
ArrayList<Animal> 만 가능하다 하지만 위의 경우 ArrayList<Animal> 뿐만아니라
Animal 클래스를 상속한 ArrayList<Dog>, ArrayList<Cat> 등도 다 가능하다.
     2.2 public static <T extends Comparable<? super T>> void sort(List<T> list)
- sort 메서드의 파라미터 List의 인자가 Comparable 클래스 유형이여야 한다.
- <? super T> 이건 Comparable의 유형 매개 변수가 T 또는 T의 상위 유형이어야 한다는 것 




Posted by Brian B. Lee
Programming/Linux2011. 5. 30. 17:17

1. Bash 쉘에서 환경변수 세팅(소멸성)
Usage> # export 변수명="값"
사용 예>
# export LINUX_DIST="ubuntu 10.04"
# export PATH=$PATH:/home/user1/app1/bin:/home/user1/app2/bin
기존 세팅 값을 가져오려면 $변수 형식으로 작성.



2. System wide (글로벌) 환경변수
/etc/profile에 "export LINUX_DIST=ubuntu 10.04" 추가
혹은
/etc/profile.d/ 에 my_variables.sh를 생성하여,
"export LINUX_DIST=ubuntu 10.04" 추가하고, chmod a+x /etc/profile.d/my_variables.sh 하여 실행 권한(모드) 세팅



3. User specific 환경변수
사용자의 홈디렉토리($HOME)에 .bashrc 또는 .bash_profile 생성하여,
"export LINUX_DIST=ubuntu 10.04" 추가
* bash 버젼에 따라, .bashrc가 사용될 수도 있고 .bash_profile이 사용될 수도 있다.



4. 환경변수 적용 및 값 확인
적용: # source "적용파일"
# source /etc/profile
값 확인:
# echo $LINUX_DIST
# set | grep LINUX_DIST



참조: http://ihacker.egloos.com/1277679
Posted by Brian B. Lee
Programming/Linux2011. 5. 30. 15:56
골유 폴더 서버 : Windows 에서 폴더 공유
리눅스 클라이언트: Ubuntu 10.10

1. 윈도우즈 폴더를 공유 한다.
2. Ubuntu에 Samba Client 설치: apt-get install samba-client
3. 윈도우즈에 접근: smbclient -L "서버" -U "ID%비밀번호"
                             ex) smbclient -L 192.168.0.2 -U administrator%admin1234
4. 윈도우즈 폴더를 리눅스에 마운트: mount -t cifs //"서버"/"공유폴더" /"마운트될리눅스폴더" -o username="ID" -o password="비밀번호" -o iocharset=cp949
ex) mount -t cifs //192.168.0.2/test /media/samTest -o username=administrator -o password=admin1234 -o iocharset=cp949
5. 마운트 확인: df -k
6.  부팅시 자동으로 마운트되게 환경설정: vi /etc/fstab =>
//"서버"/"공유폴더" /"마운트될리눅스폴더" cifs username="ID",password="비밀번호",iocharset=cp949 0 0 입력
ex) //192.168.0.2/test /media/samTest cifs username=administrator,password=admin1234,iocharset=cp949 0 0 입력
7. 설정파일 확인: mount -a <= 아무것도 안나오면 정상 
Posted by Brian B. Lee
Programming/Java2011. 5. 30. 09:59
제 11회 2011 한국자바개발자 컨퍼런스



홈페이지는 http://kjdc.org/ 입니다.

자바 개발 뿐 아니라 요즘 이슈인 클라우드 컴퓨팅이라던지 데이터베이스, 아키텍처 관련 세션도 있네요.
관심 있으신분들은 행사일이 일요일이니 참석하면 좋을것 같습니다.

Posted by Brian B. Lee
Programming/Linux2011. 5. 27. 18:40
apt-cache search openssh 하면 openssh-server가 검색된다
apt-get install openssh-server 설치~

맥에서 접속 ssh "아이디"@"접속할 주소" or ssh -l"아이디" "접속주소"

윈도우에서는 putty로 접속
Posted by Brian B. Lee
Programming/Linux2011. 5. 27. 18:00


리눅스를 처음 Ubuntu로 접하는 사람에게 추천한다.(영문)

다운: http://www.ubuntupocketguide.com/download.html
Posted by Brian B. Lee
Programming/Linux2011. 5. 27. 17:27
Synergy 서버 : 다른 컴퓨터 OS
Synergy 클라이언트: Ubuntu

1. Synergy 서버 설치
 일단 Synergy 사이트(http://synergy-foss.org/)에서 서버로 사용할 컴퓨터의 운영체제 맞게
Synergy 프로그램을 다운받아 설치 한다.
 
2. Synergy 클라이언트 설치
 이 글의 주제와 같이 Synergy 사이트에서 Ubuntu and Devian 용 Synergy를 다운받아 설치한다.

3. Synergy 클라이언트 세팅
 3.1 클라이언트 설정: 터미널에서 다음을 실행
    /usr/bin/synergyc --name "스크린네임" "서버의IP"
    ex) /usr/bin/synergyc --name linux_clinet 192.168.0.2
    스크린네임이란 Synergy 서버에서 사용할 클라이언트의 ID 같은 것이다.
 3.2 클라이언트 부팅시 자동연결 설정: 터미널에서 다음을 실행
   3.2.1 sudo vi /etc/gdm/Init/Default
   3.2.2 Default 파일 수정: 파일의 제일 끝에 exit 0 의 앞에 다음과 같이 입력
      /usr/bin/killall synergyc
      sleep 1
      /usr/bin/synergyc --name "스크린네임" "서버의IP"
   3.2.3 mkdir ~/.config/autostart/
           vi ~/.config/autostart/synergyc.desktop
   3.2.4 synergyc.desktop 파일 수정:
      [Desktop Entry]
      Type=Application
      Encoding=UTF-8
      Version=1.0
      Name=No Name
      Name[en_US]=synergy
      Exec=/usr/bin/synergyc --name "스크린네임" "서버의IP"
      X-GNOME-Autostart-enabled=true

4. Synergy 서버 세팅
 이 부분은 다른 인터넷에 많이 나와있기 때문에 생략하기로 한다. 위에서 설정한 스크린네임을 통해
서버의 컴퓨터 왼쪽에 있는지 오른쪽에 있는지만 잘 설정해 주면 된다.

참조: http://jongsori.tistory.com/tag/Ubuntu%2010.10

Posted by Brian B. Lee
Programming/Linux2011. 5. 27. 17:02
1. 소프트웨어 소스 다운 위치 변경
   시스템 > 관리 > 시냅틱 패키지 관리자 > 설정 > 저장소 > Ubuntu 소프트웨어 >
   다운로드 위치: http://ftp.daum.net/ubuntu

2. JAVA 설치
   1. sudo add-apt-repository "deb http://archive.canonical.com/ubuntu maverick partner"
   2. sudo apt-get update
   3. sudo apt-get install sun-java6-jdk

3. JAVA_HOME PATH 설정
   1. sudo vi /etc/profile
   2. export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.24
       export PATH=$PATH: $JAVA_HOME/bin
       export CLASSPATH=$JAVA_HOME/jre/lib/
   3. source /etc/profile

4. 확인
   1. java -version
   2. echo $JAVA_HOME
 
Posted by Brian B. Lee
Programming/Java2011. 5. 19. 00:05
조건문 ? 참일때 : 거짓일때
Posted by Brian B. Lee