ToyProblem ¶
~cpp
public class factorial {
public int process(int number) {
if(number!=1)
return number*process(number-1);
else return 1;
}
public void main() {
System.out.println(process(7));
}
}
- �래 RandomWork 짜�게 있는� eclipse가 Run� 안��군요;
그래서 디버그 � 결과 확�불가.;
Run쪽 옵션ì�´ 틀린건가;; 오류가 아니ë�¼ ë©”ì�¸ í�´ëž˜ìŠ¤ê°€ 없다는 등ì�˜ 다양한 메시지가 뜨면서 안ë�¼ìš”; ê²°êµ ê°„ë‹¨í•œ 소스를 올립니다
ê°�체지향 ê°œë…� ¶
ê°�체란? ¶
- 세계� 존재하는 것들, ex) 사람, ��차, 컴퓨터 등..
다�� � 가지로 나눌 수 있다.
- ìƒ�태(state) : ê°�ì²´ê°€ ê°€ì§€ê³ ìžˆëŠ” ì†�성 ë˜�는 특성
- í–‰ë�™(behavior) : ê°�ì²´ê°€ ê°€ì§€ê³ ìžˆëŠ” 기능 ë˜�는 í• ìˆ˜ 있는 í–‰ë�™
ex) ��차 - 색, 바퀴, �잡�, 현재 기어위치 등� �태�,
달린다, 멈춘다, ��를 높�거나 낮춘다 등� 행�� 한다
- ìƒ�태(state) : ê°�ì²´ê°€ ê°€ì§€ê³ ìžˆëŠ” ì†�성 ë˜�는 특성
- �체� �태와 행� -> 소프트웨어 �체� 변수와 메소드
로 모��한다.
즉, �태를 나타내는 변수와 그 �태를 변경하는 행�� 메소드로
실세계ì�˜ ê°�체를 소프트웨어 ê°�체로 모ë�¸ë§�í•˜ê³ êµ¬í˜„í•œë‹¤.
ì�´ëŸ¬í•œ 실세계를 소프트웨어ì �으로 표현하기 위한 방법중 하나가 'ê°�체지향'ì�´ë‹¤.
ê°�체지향 방법ì—�서 나타나는 몇 가지 특징 <- OOPì�˜ 특징 ¶
- 캡�화 : 변수(�태)와 메소드(행�)를 하나� 묶�으로 캡�화한다.
ì�´ê²ƒìœ¼ë¡œ ì�¸í•´ 모듈성과 ì •ë³´ì�€ë‹‰ì�´ë�¼ëŠ” ì�´ë“�ì�„ 얻는ë�°,,
하나ì�˜ ê°�ì²´ì�˜ 소스가 다른 소스와 무관하게 ìœ ì§€í• ìˆ˜ ìžˆê³ , ë˜� publicì�´ë‚˜ private 권한ì�„ 통해 ì •ë³´ì—� 대한 ì ‘ê·¼ ì •ë�„를 ì„¤ì •í• ìˆ˜ 있다.
- 메시지 : ê°�체는 다른 ê°�ì²´ì—� 메시지를 보내서 í†µì‹ í• ìˆ˜ 있다.
ê°� 메시지는 메시지를 ë°›ì�„ ê°�ì²´, 수행ì�„ ìš”ì²í•œ 메소드ì�˜ ì�´ë¦„ê³¼ ê·¸ 메소드ì—� 필요한 매개변수ì�˜ 세 가지 구성요소를 갖는다.
- í�´ëž˜ìФ : íŠ¹ì •í•œ 종류ì�˜ ëª¨ë“ ê°�체들ì—� ì �ìš©í• ìˆ˜ 있는 변수와 메소드를 ì •ì�˜í•˜ëŠ” '소프트웨어ì �ì�¸ 설계ë�„' ì�´ë‹¤.
실세계ì�˜ ê°�체들ì�˜ ìƒ�태와 í–‰ë�™ë“¤ì�„ 소프트웨어ì �으로 ì¶”ìƒ�화해 놓ì�€ 것ì�´ë‹¤.
ì²ì‚¬ì§„ì�´ë�¼ê³ 하기ë�„ í•˜ê³ , ë²½ë�Œì�„ ì°�기 위한 하나ì�˜ í‹€ì—� ë¹„ìœ í•˜ê¸°ë�„ 한다.
- ì�¸ìŠ¤í„´ìŠ¤ : í�´ëž˜ìФì—� 대한 변수를 ì„ ì–¸í•˜ëŠ” 것ì�„ 'ì�¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒ�성한다'ê³ í•˜ê³ , ì�´ 변수를 ì�¸ìŠ¤í„´ìŠ¤ë�¼ 한다.
ì�¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒ�성하는 것ì�€ ë²½ë�Œí‹€ë¡œ ë²½ë�Œì�„ ì°�ëŠ”ë‹¤ê³ í• ìˆ˜ìžˆë‹¤.
- ê°�ì²´ : 실세계ì—� ì �ìš© - ìž�ë�™ì°¨(í�´ëž˜ìФ) -> 아반테, 누비ë�¼, ê·¸ëžœì €, í‹°ê³ ë“± (ê°�ì²´)
- ìƒ�ì†� : ìž�ë�™ì°¨ í�´ëž˜ìФì—� 버스 í�´ëž˜ìФ, íŠ¸ëŸ í�´ëž˜ìФ, ìž�가용 í�´ëž˜ìŠ¤ê°€ ì†�한다면,
ìž�ë�™ì°¨ í�´ëž˜ìŠ¤ëŠ” ìƒ�위 í�´ëž˜ìФ, 버스,트ëŸ,ìž�가용 í�´ëž˜ìŠ¤ë¥¼ 하위í�´ëž˜ìФë�¼ 하며, ì�´ë“¤ì�˜ 관계ì—�서 "하위í�´ëž˜ìŠ¤ëŠ” ìƒ�위í�´ëž˜ìŠ¤ë¥¼ ìƒ�ì†�한다"ê³ í•œë‹¤.
- 다형성 : 같� �름� 같는 여러 가지 형태가 존재한다는 것
ìž�ë°”ì—� 메소드(함수) ë‹¤ì¤‘ì •ì�˜, 매소드 ìž¬ì •ì�˜ê°€ 있다.
í�´ëž˜ìФ ì •ì�˜ ë°� ì�¸ìŠ¤í„´ìŠ¤(ê°�ì²´) ìƒ�성 ¶
ìž�ë°” 언어는 ê°�체지향 프로그래ë°�ì�„ í• ìˆ˜ 있ë�„ë¡� 문법ì�„ ì œê³µí•´ 준다.
>
- í�´ëž˜ìФ ì •ì�˜
~cpp
class �래스�름 {
// 변수 ì„ ì–¸ë¶€
…
// 메소드 ì„ ì–¸ë¶€
…
}
~cpp �래스�름 �래스�스턴스�름 = new �래스�름(); �는 �래스�름 �래스�스턴스�름; �래스�스턴스�름 = new �래스�름();
변수 ë°� 메소드ì�˜ ì ‘ê·¼ì œì–´ ¶
- public - ê°™ì�€ í�´ëž˜ìФ, 하위í�´ëž˜ìФ 등 ê°™ì�€ 패키지ì�˜ ëª¨ë“ í�´ëž˜ìФì—�서 ì ‘ê·¼ê°€ëŠ¥
- private - ê°™ì�€í�´ëž˜ìФ ë‚´ì—�서만 ì ‘ê·¼ê°€ëŠ¥
- protected - ê°™ì�€ í�´ëž˜ìФ, 하위í�´ëž˜ìФ 등 ê°™ì�€ 패키지ì�˜ ëª¨ë“ í�´ëž˜ìФì—�서 ì ‘ê·¼ê°€ëŠ¥
- ìƒ�ëžµ : ê°™ì�€ í�´ëž˜ìФ ë˜�는 ê°™ì�€ 패키지ì�˜ ëª¨ë“ í�´ëž˜ìФì—�서 ì ‘ê·¼ê°€ëŠ¥, 하위í�´ëž˜ìФì—�서 ì ‘ê·¼ 불가능
메소드ì�˜ 다중 ì •ì�˜ ¶
- 같� �름으로 여러 �� 하는 것
- ìž�ë°”ì—�서는 함수 다중 ì •ì�˜ë§Œì�„ ì œê³µí•¨
ê°�ì²´ ìƒ�성ìž�와 ê°�ì²´ ìƒ�성 ê³¼ì • ¶
ê°�ì²´ ìƒ�성ìž� ¶
ìž�ë°” 언어를 ì�´ìš©í•˜ì—¬ ê°�체를 ìƒ�ì„±í•˜ê³ í•„ìš”ì—� ë”°ë�¼ ê°’ì�„ 초기화 í•´ 주어야 하는 경우
ê°�ì²´ ìƒ�성ìž�는 new ì—°ì‚°ìž�를 ì�´ìš©í•˜ì—¬ ê°�체를 ìƒ�ì„±í• ë•Œë�„ 호출ë�œë‹¤.
===this===
* ìž�기 ìž�ì‹ ì�„ 나타냄
* 메소드 내�서 변수와 �체� �름� 같� 경우 변수 앞� this를 붙임
* �체�성� 내�서 다른 �성� 호출
ê°�ì²´ ìƒ�성ìž�는 new ì—°ì‚°ìž�를 ì�´ìš©í•˜ì—¬ ê°�체를 ìƒ�ì„±í• ë•Œë�„ 호출ë�œë‹¤.
- ê°�ì²´ê°€ ìƒ�성ë� 때 ìž�ë�™í˜¸ì¶œ, ê°�ì²´ì�˜ 변수초기화, 메모리 í• ë‹¹ë“¤ì�˜ 작업ì�„ 함
- new ì—°ì‚°ìž�로 ê°�체를 ìƒ�ì„±í• ë•Œ 호출, 메모리를 í• ë‹¹í•˜ê³ ê°�ì²´ ìƒ�성ìž� 호출
~cpp
�래스�름(형�매개변수 리스트) { … }
�래스�름(형�매개변수 리스트) {
다른 �체 �성� 호출; ß 반드시 첫번째 줄�서
ì�´ë£¨ì–´ì ¸ì•¼ 함.
…
}
�래스�름 변수�름 = new �래스�름(실매개변수 리스트);
===this===
* ìž�기 ìž�ì‹ ì�„ 나타냄
* 메소드 내�서 변수와 �체� �름� 같� 경우 변수 앞� this를 붙임
* �체�성� 내�서 다른 �성� 호출
~cpp this this.멤버변수 this(매개변수);
í�´ëž™ìŠ¤ë©¤ë²„ì™€ ì�¸ìŠ¤í„´ìŠ¤ 멤버 ¶
í�´ëž˜ìФ 멤버는 변수와 메소드가 ìžˆê³ ,
�는 �스턴스 변수와 �스턴스 메소드 � �래스 변수와 �래스 메소드로 나뉜다.
�는 �스턴스 변수와 �스턴스 메소드 � �래스 변수와 �래스 메소드로 나뉜다.
~cpp í�´ëž˜ìФ 변수와 í�´ëž˜ìФ 메소드ì�˜ ì„ ì–¸) [ì ‘ê·¼ê¶Œí•œ] static 변수 ì„ ì–¸; [ì ‘ê·¼ê¶Œí•œ] static 메소드 ì„ ì–¸; í�´ëž˜ìФ 변수와 í�´ëž˜ìФ 메소드ì�˜ ì ‘ê·¼) í�´ëž˜ìФì�´ë¦„.í�´ëž˜ìŠ¤ë©”ì†Œë“œ() í�´ëž˜ìŠ¤ë©”ì†Œë“œ() ê°�체참조값.í�´ëž˜ìŠ¤ë©”ì†Œë“œ()
í�´ëž˜ìФ 초기화 ë°� ê°�ì²´ì�˜ ìƒ�성 ê³¼ì • ¶
í�´ëž˜ìŠ¤ë¥¼ 처ì�Œìœ¼ë¡œ 메모리ì—� ì �재
�래스 초기화
�래스 실행
�래스 초기화
�래스 실행
ìƒ�ì†� ¶
ìƒ�ì†�, ìƒ�위í�´ëž˜ìФ, 하위í�´ëž˜ìФ ¶
위� 있�
ìƒ�ì†�ê³¼ ìƒ�성ìž� ë°� ìƒ�성 ê³¼ì • ¶
- this : �래스 내� �체 �성��서 다른 �체 �성�를 호출
ìƒ�ì†�ê³¼ ì�¸ìŠ¤í„´ìŠ¤ 메소드ì�˜ ìž¬ì •ì�˜(Overriding) ¶
기본ì �으로 하위í�´ëž˜ìŠ¤ëŠ” ìƒ�위í�´ëž˜ìŠ¤ë¡œë¶€í„° ìƒ�ì†�ë�˜ëŠ” ìƒ�태와 í–‰ë�™ë“¤ì�„ 가진다.
ë˜�한, 하위í�´ëž˜ìŠ¤ëŠ” ìž�ì‹ ì—�게 필요한 변수들과 메소드를 추가ì �으로 ì •ì�˜í• 수 있습니다. ê·¸ë¦¬ê³ , 하위í�´ëž˜ìŠ¤ëŠ” ìƒ�위í�´ëž˜ìФì—�서 ì •ì�˜ë�œ 메소드와 ê°™ì�€ ì�´ë¦„, ê°™ì�€ ì�¸ìž�들ì�„ 갖는 새로운 메소드를 ì •ì�˜í•˜ì—¬ ìƒ�위í�´ëž˜ìФì—�서 ìƒ�ì†�ë�˜ëŠ” 메소드를 ìž¬ì •ì�˜í• 수 잇는ë�°,
여기서 몇가지 지켜야 í• ê²ƒì�´ 있다.
ë˜�한, 하위í�´ëž˜ìŠ¤ëŠ” ìž�ì‹ ì—�게 필요한 변수들과 메소드를 추가ì �으로 ì •ì�˜í• 수 있습니다. ê·¸ë¦¬ê³ , 하위í�´ëž˜ìŠ¤ëŠ” ìƒ�위í�´ëž˜ìФì—�서 ì •ì�˜ë�œ 메소드와 ê°™ì�€ ì�´ë¦„, ê°™ì�€ ì�¸ìž�들ì�„ 갖는 새로운 메소드를 ì •ì�˜í•˜ì—¬ ìƒ�위í�´ëž˜ìФì—�서 ìƒ�ì†�ë�˜ëŠ” 메소드를 ìž¬ì •ì�˜í• 수 잇는ë�°,
여기서 몇가지 지켜야 í• ê²ƒì�´ 있다.
- �스턴스 메소드�어야 한다.
- 메소드� �름� 같아야 한다.
- 매개변수� 개수가 같아야 한다.
- 매개변수 ��� �료형� �치해야 한다.
- 메소드� 리턴형� �치해야 한다.
ìƒ�ì†�ê³¼ 변수 ë°� 메소드ì�˜ ì ‘ê·¼ì œì–´ ¶
- ì�¸ìŠ¤í„´ìŠ¤ 변수, í�´ëž˜ìФ 변수, ê·¸ë¦¬ê³ í�´ëž˜ìФ 메소드는 ì�€ë‹‰ë� 수는 있어ë�„ ìž¬ì •ì�˜ ë� 수는 없다.
...
...
...
...
...










