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페이지 이내로 줄어보세요.


Retrieved from http://wiki.zeropage.org/wiki.php/JavaStudy2003/두번째과제/노수민
last modified 2021-02-07 05:23:32