U E D R , A S I H C RSS

Java Study2003/두번째과제/노수민

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) 자동차 - 색, 바퀴, 손잡이, 현재 기어위치 등의 상태에,
    달린다, 멈춘다, 속도를 높이거나 낮춘다 등의 행동을 한다

이러한 실세계를 소프트웨어적으로 표현하기 위한 방법중 하나가 '객체지향'이다.

  • 객체의 상태와 행동 -> 소프트웨어 객체의 변와 메소드
    로 모델링한다.
    즉, 상태를 나타내는 변와 그 상태를 변경하는 행동의 메소드로
    실세계의 객체를 소프트웨어 객체로 모델링하고 구현한다.

객체지향 방법에서 나타나는 몇 가지 특징 <- OOP의 특징


  • 캡슐화 : 변(상태)와 메소드(행동)를 하나의 묶음으로 캡슐화한다.
    이것으로 인해 모듈성과 정보은닉이라는 이득을 얻는데,,
    하나의 객체의 소스가 다른 소스와 무관하게 유지할 있고, 또 public이나 private 권한을 통해 정보에 대한 접근 정도를 설정할 있다.

  • 메시지 : 객체는 다른 객체에 메시지를 보내서 통신할 있다.
    각 메시지는 메시지를 받을 객체, 행을 요청한 메소드의 이름과 그 메소드에 필요한 매개변의 세 가지 구성요소를 갖는다.

  • 클래스 : 특정한 종류의 모든 객체들에 적용할 있는 변와 메소드를 정의하는 '소프트웨어적인 설계도' 이다.
    실세계의 객체들의 상태와 행동들을 소프트웨어적으로 추상화해 놓은 것이다.
    청사진이라고 하기도 하고, 벽돌을 찍기 위한 하나의 틀에 비유하기도 한다.

  • 인스턴스 : 클래스에 대한 변를 선언하는 것을 '인스턴스를 생성한다'고 하고, 이 변를 인스턴스라 한다.
    인스턴스를 생성하는 것은 벽돌틀로 벽돌을 찍는다고 할 있다.

  • 객체 : 실세계에 적용 - 자동차(클래스) -> 아반테, 누비라, 그랜저, 티고 등 (객체)

  • 상속 : 자동차 클래스에 버스 클래스, 트럭 클래스, 자가용 클래스가 속한다면,
    자동차 클래스는 상위 클래스, 버스,트럭,자가용 클래스를 하위클래스라 하며, 이들의 관계에서 "하위클래스는 상위클래스를 상속한다"고 한다.

  • 다형성 : 같은 이름을 같는 여러 가지 형태가 존재한다는 것
    자바에 메소드(함) 다중정의, 매소드 재정의가 있다.

클래스 정의 및 인스턴스(객체) 생성


자바 언어는 객체지향 프로그래밍을 할 있도록 문법을 제공해 준다.

  • 클래스 정의

~cpp 
class 클래스이름 {
   // 변 선언부
      …
   // 메소드 선언부
      …
}     

  • 인스턴스 생성

~cpp 
 클래스이름 클래스인스턴스이름 = new 클래스이름();

또는

클래스이름 클래스인스턴스이름;

클래스인스턴스이름 = new 클래스이름();

및 메소드의 접근제어

  • public - 같은 클래스, 하위클래스 등 같은 패키지의 모든 클래스에서 접근가능
  • private - 같은클래스 내에서만 접근가능
  • protected - 같은 클래스, 하위클래스 등 같은 패키지의 모든 클래스에서 접근가능
  • 생략 : 같은 클래스 또는 같은 패키지의 모든 클래스에서 접근가능, 하위클래스에서 접근 불가능

메소드의 다중 정의


  • 같은 이름으로 여러 일을 하는 것
  • 자바에서는 함 다중 정의만을 제공함

객체 생성자와 객체 생성 과정


객체 생성자


자바 언어를 이용하여 객체를 생성하고 필요에 따라 값을 초기화 해 주어야 하는 경우
객체 생성자는 new 연산자를 이용하여 객체를 생성할 때도 호출된다.

  • 객체가 생성될 때 자동호출, 객체의 변초기화, 메모리 할당들의 작업을 함
  • new 연산자로 객체를 생성할때 호출, 메모리를 할당하고 객체 생성자 호출

~cpp 
클래스이름(형식매개변 리스트) { … }

클래스이름(형식매개변 리스트) {
다른 객체 생성자 호출;  ß 반드시 첫번째 줄에서  
이루어져야 함.
 …
}

클래스이름 변이름 = new 클래스이름(실매개변 리스트);

===this===

* 자기 자신을 나타냄
* 메소드 내에서 변와 객체의 이름이 같을 경우 변 앞에 this를 붙임
* 객체생성자 내에서 다른 생성자 호출
~cpp 
this

this.멤버변

this(매개변);

클랙스멤버와 인스턴스 멤버


클래스 멤버는 변와 메소드가 있고,
이는 인스턴스 변와 인스턴스 메소드 및 클래스 변와 클래스 메소드로 나뉜다.


~cpp 
클래스 변와 클래스 메소드의 선언)

[접근권한] static 변 선언;

[접근권한] static 메소드 선언;

클래스 변와 클래스 메소드의 접근)

클래스이름.클래스메소드()

클래스메소드()

객체참조값.클래스메소드()


클래스 초기화 및 객체의 생성 과정


클래스를 처음으로 메모리에 적재

클래스 초기화

클래스 실행


상속

상속, 상위클래스, 하위클래스

위에 있음

상속과 생성자 및 생성 과정


  • this : 클래스 내의 객체 생성자에서 다른 객체 생성자를 호출

  • super : 하위클래스의 객체 생성자에서 상위클래스의 객체 생성자를 호출

  • 객체 생성순서
  • new 생성자를 이용하여 객체를 위한 메모리 공간을 할당

  • 모든 인스턴스 변를 0, '\u0000', false, 그리고 null 등과 같은 디폴트 초기치로 초기화

  • 상위클래스의 생성자를 호출

  • 하위클래스에 선언된 인스턴스 변 초기자 식 및 인스턴스 초기화 블록을 실행

  • 하위클래스의 생성자 몸체를 실행

상속과 인스턴스 메소드의 재정의(Overriding)

기본적으로 하위클래스는 상위클래스로부터 상속되는 상태와 행동들을 가진다.

또한, 하위클래스는 자신에게 필요한 변들과 메소드를 추가적으로 정의할 있습니다. 그리고, 하위클래스는 상위클래스에서 정의된 메소드와 같은 이름, 같은 인자들을 갖는 새로운 메소드를 정의하여 상위클래스에서 상속되는 메소드를 재정의할 잇는데,

여기서 몇가지 지켜야 할 것이 있다.

  • 인스턴스 메소드이어야 한다.
  • 메소드의 이름이 같아야 한다.
  • 매개변의 개가 같아야 한다.
  • 매개변 각각의 자료형이 일치해야 한다.
  • 메소드의 리턴형이 일치해야 한다.

상속과 변 및 메소드의 접근제어


  • 인스턴스 변, 클래스 변, 그리고 클래스 메소드는 은닉될 는 있어도 재정의 될 는 없다.

  • private 접근지정자로 선언된 변는 상속할 없고, 메소드는 상속 및 재정의 할 없다.

  • public 또는 protected 접근 지정자로 선언된 변와 메소드는 상속할 있고, 메소드에 대해 재정의 할 있다.


...
...
...




OOP


추가 요구 내용


  • 내용을 1페이지 이내로 줄어보세요.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:32
Processing time 0.0291 sec