본문 바로가기

Java/Java_OOP 1(object_oriented Programming)

Java_OOP 1 ( object_oriented Programming ) 객체지향적 프로그래밍

반응형

Java_OOP (object_oriented Programming) 

  - 객체지향적 프로그래밍 

  - 시작객체(object) + 객체(object) + 객체(object) + .... = 프로그램

  - 객체 단위의 프로그래밍 기법(방법)

  - 객체 == 개체 == 물건 == 부품 == object

  - 클래스 : 객체 설계도 

 

1. 객체지향 언어  
ㄱ. 코드 재사용이 높다.    -> 생산성 향상
 - 새로운 코드를 작성할 때, 기존의 코드를 이용하여 쉽게 작성할 수 있다. 
ㄴ. 코드의 관리가 용이하다.  -> 유지, 보수, 확장성
 - 코드 간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다. 
ㄷ. 신뢰성이 높은 프로그래밍을 가능하게 했다. 
 - 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 유지할 수 있도록 하며,  
   코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.  

 

A. 상속성  B. 다형성  C. 추상화  D. 은닉화 E. 캡슐화

 

2. 클래스와 객체의 정의와 용도 
 클래스의 정의 - 클래스란 객체를 정의해 놓은 것이다. 
 클래스의 용도 - 클래스는 객체를 생성하는데 사용된다. 

 객체의 정의 - 실제로 존재하는 것 , 사물 또는 개념 
 객체의 용도 - 객체가 가지고 있는 기능과 속성에 따라 다름 

 유형의 객체 - 책상, 의자 , 자동차, TV와 같은 사물 
 무형의 객체 - 수학공식, 프로그램 에러와 같은 논리나 개념 

 

 3. 참조타입 : 배열, [클래스], 인터페이스
                  new 연산자 의해 힙(동적)영역 실제 기억공간 할당  -> 참조
                  참조타입은 new 연산자로 생성 
 4. 클래스 선언 형식
   접근지정자 + 기타제어자  modifier
   [접근지정자] + [기타제어자] + class + 클래스명 + [extends 수퍼(Super)클래스] + [implements 인터페이스...]{ field } 
   [] - 생략가능

 

   필드 ( field ) - 멤버 변수
   메소드( method ) - 맴버 함수

 

 

 Class 생성 

class 생성

필드 접근 방식 = 객체명.클래스


 5. 클래스 설계하는 과정(단계)
   ㄱ. 요구, 분석 
   ㄴ. 특징(속성), 기능(함수,메서드) 목록 작성
   ㄷ. 클래스 선언(설계)
   ㄹ. 객체 테스트 
   ㅁ. 문제점 - 유지, 보수...
   ㅂ. 상용화
   ㅅ. 버전 관리 + 기능, 문제점 처리... 

 

 

6. 객체와 인스턴스 
 * 객체 ?

  - 클래스를 자료형으로 선언된 참조변수

 * 인스턴스화?

  - 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)

  - 어떤클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)

    클래스  -->인스턴스(객체)

 

속성(property)  -  멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)

기능(function)  -  메서드(method), 함수(function), 행위(behavior)

 

 

* 인스턴스

= 참조변수를 통해서만 다룰수있다.

= 참조변수의 타입은 인스턴스의 타입과 일치해야한다.

 

 

 

 

* 인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.

 

7. 클래스의 또 다른 정의 

 ㄱ. 변수 - 하나의 데이터를 저장할 수 있는 공간

 ㄴ. 배열 - 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간

              + 동일한 자료형

 ㄷ. 구조체( struct ) - 서로 관련된 여러 데이터를 종류에 관계 없이 하나의 집합으로 저장할 수 있는 공간

              +  int / short/ String/ boolean + 다른 자료형

 ㄹ. 클래스 - 데이터와 함수의 결합 (구조체 + 함수(기능))

 

8. 변수와 메서드 

변수의 종류와 특징

ㄱ. 인스턴스 변수(instance variable)

  - 클래스 영역에선언

  - 인스턴스를 생성할 때 생성

  - 인스턴스 변수값을 읽어 오거나 저장하기 위해서 먼저 인스턴스 생성

  - 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다.

  - 각 변수마다 고유한 상태를 유지해야하는 속성의 경우, 인스턴스로 선언

 

ㄴ. 클래스 변수(class variable)

  - 선언 방법은 인스턴스 변수 앞에 static 을 붙이기만 하면된다.

  - 모든 인스턴스가 공통된 저장공간(변수)를 공유한다.

  - 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성인 경우 사용한다.

  - 인스턴스를 생성하지 않고도 언제라도 바로사용할 수 있다.

  - '클래스이름.클래스변수' 형식으로 사용

     ex) Variables클래스의 클래스변수 va를 사용하면 'Variables.va'

  - public 을 앞에 붙이면 같은 픅로그램 내에서 어디서나 접근할 수 있는 '전역변수'성격을 갖는다.

 

ㄷ. 지역변수

  - 메서드 내에서 선언되어 메서드 내에서만 사용가능

  - 메서드 종료시 소멸된다.

  - for, while 의 안에서 선언된 지역변수는 안에서만 사용이 가능하며 벗어나면 소멸된다. 

 

 

** 인스턴스변수는 인스턴스가 생성될 때 마다 생성되어 각기 다른 값을 유지할 수 있지만, 

    클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므고 공통된 값을 갖는다.

 

9. 메서드(method)

  - 특정 작업을 수행하는 일련의 문장들을 하나로 묶는 것.

  - 수학에서의 함수와 유사

 * 메서드 사용이유

  ㄱ. 높은 재사용성 

  ㄴ. 중복된 코드의 제거 

  ㄷ. 프로그램 구조화

 

 메서드 형식    

메서드 형식

[변수]
  * 필드 - 클래스 변수(static), 인스턴스 변수
  * 지역 변수
[메서드] - 클래스(static)메소드, 인스턴스 메소드

 

 

10. 기본형 매개변수 와 참조형 매개변수

  - 기본형 매개변수  =  변수의 값을 읽기만 할 수 있다.      ( read only )

  - 참조형 매개변수  =  변수의 값을 읽고 변경할 수 있다.   ( read & write )

 

* 참조형 반환 타입 

  - 매개변수뿐만 아니라 반환타입도 참조형이 될 수 있다. 

  - 반환타입이 참조형이라는 것은 반환하는 값의 타입이 참조형이라는 것은 메서드가 

    '  객체주소 '를 반환 한다는 것을 의미 

  - 모든 참조형 탑입의 값은  ' 객체의 주소 ' 이므로 정수값이 반환되는 것일 뿐 특별한 것은 없다.

 

11. 재귀호출 ( recursive call )

  ㄱ. 매서드의 내부에서 메서드 자기 자신을 호출하는것 

  ㄴ. 재귀 호출하는 메서드를 ' 재귀 메서드 '

  ㄷ. 호출된 메서드는 '값에 의한 호출 (call by value)'를 통해 원래 값이아닌 복사된 값으로 작업되기 때문에

    호출한 메서드와 관계없이 독립적인 작업 수행

   - 오로지 재귀호출뿐이면 ' 무한루프 ' 에 빠지게 되어 조건문이 필수적으로 함께 사용되야한다. 

  - 반복문은 그저 같은 문장을 반복해서 수행하는것이다.  

  ex)  매개변수 복사와 종료 후 복귀할 주소 저장 등 여러 추가로 필요하기 때문에 반복문보다 재귀호출이 수행이 오래          걸린다. 

 * 왜 굳이 반복문 대신 재귀호출을 사용할까? *

  - 논리적 간결함  :  작업을 반복적으로 처리해야한데 반복문이 너무 복잡하다면 재귀호출로 간단히 할 수 있는지 판단하여 비용보다 간결함이 주는 장점이 충분한경우 사용한다.

 

 ex)  팩토리얼(factorial) - ' 5! = 5 * 4 * 3 * 2 * 1 = 120 '

 

12. 클래스 메서드 (static 메서드) 와 인스턴스 메서드

* 메서드 앞에 static 이 붙으면 클래스 메서드 

* 메서드 앞에 static 이 없으면 인스턴스 메서드

 

* 멤버변수 중에 static 이 붙으면 클래스변수(static 변수) 

* 멤버변수 중에 staitc 이 없으면 인스턴스변수 

* 멤버변수 = 클래스변수 && 인스턴스 변수

 

 

ㄱ. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static 을 붙인다.

  - static 필드. 메서드 : 공통으로 사용할 필드. 메서드

ㄴ. 클래스 변수 는 인스턴스를 생성하지 않아도 사용할 수 있다.

  - 클래스명.static필드     Save.rate

  - 클래스명.static메서드

ㄷ. 클래스 메서드는 인스턴수변수를 사용할 수 없다.

ㄹ. 메서드 내에서 인스턴스 변수를 사용하지 않는다면 , static을 붙인다.

  - 클래스 메서드는 this 사용할 수 없다.

  - 클래스 자기 자신의 주소값을 가지는 참조변수

  - super class 사용 x 

 

 

- 클래스 매서드도 클래스변수처럼 객체를 생성하지 않고도  '클래스이름.메서드(매개변수)'와 같은 방식으로 호출 가능

- 반면 ! 인스턴스 메서드는 객체를 생성해야만 호출가능 

- 인스턴스 변수나 인스턴스 메서드를 사용하지않는 관계없는 인스턴스는 static 메서드인 클레스 메서드로 정의한다.

 

● 인스턴스 메서드 

  - 인스턴스 생성 후 , '참조변수.메서드이름()'으로 호출

  - 인스턴스변수나 인스턴스메서드와 관련된 작업을 하는 메서드

  - 메서드 내에서 인스턴스변수 사용가능

 

● 클래스메서드(static메서드)  ex) main()

  - 객체 생성없이 '클레스이름.메서드이름()' 으로 호출

  - 인스턴스변수나 인스턴스메서드와 관련없는 작업을 하는 메서드

  - 메서드 내에서 인스턴스변수 사용불가

  - 메서드 내에서 인스턴스변수를 사용하지 않는다면 static을 붙이는 것을 고려

 

 

 

- 같은 클래스의 멤버간에는 객체 생성이나 참조변수 없이 참조할 수 있다.

- 그러나 static 멤버들은 인스턴스멤버들을 참조할 수 없다. 

 

 

< static 사용하여 클래스 메서드 정의하는 이유 ? >

 인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하기에 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드 이다. 

 인스턴스 변수는 객체를 생성해야만 호출이가능 인스턴스 메서드 역시 객체를 생성해야만 호출이 가능

 

< 참고 > 

random() 과 같은 Math클래스의 메서드는 모두 클래스 메서드이다. Math클래스에서는 인스턴스 변수가 하나도 없어 모두를 매개변수로 받아서 처리한다.

 

 

13. 오버로딩 (overloading)  - 과적하다. 부담을 많이 지우다.

 - 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩(method overloading)' 또는 '오버로딩(overloading)' 이라고 한다.

 

  * 오버로딩 조건

   - 메서드의 이름이 같아야 한다.

   - 매개변수의 개수 또는 타입이 달라야 한다.

   - 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.

     (리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 X )

 

 

ex) 오버로딩의 예제

- 다양하게 오버로딩된 메서드를 제공해서 모든 변수를 출력할수 있도록 설계

 

 

 

- 매개변수 이름이 다른 것은 오버로딩이 X

 

 

- 리턴타입은 오버로딩의 성립조건이 X

 

 

- 매개변수의 타입이 다르므로 오버로딩이 성립

 

 

- 매개변수는 다르지만 같은 의미의 기능을 수행

 

 

반응형