본문 바로가기

프로그래밍/Java

5. 객체지향개념

5. 객체지향 프로그래밍


객체지향언어의 특징과 장점

1) 상속                            (( 1) 코드의 재사용성이 높다.                               

2) 캡슐화                            2) 코드의 관리가 용이하다.                              

3) 다형성                            3) 신뢰성 높은 프로그래밍이 가능하다. )) → 재사용성, 유지보수, 중복된 코드의 제거


클래스와 객체

 클래스 : 객체를 정의한 것, 객체를 만들기 위해 , (설계도)

 객체 : 속성(변수)과 기능(메서드)의 집합 (제품)  (객체≒인스턴스라고 생각하면 편하다.)

 인스턴스 : 클래스로부터 만들어진 객체

 인스턴스화 : 객체를 만드는 과정

인스턴스의 생성과 사용 예제

  (객체를 만드는 예제 실습) (Tv t1 = new Tv)....

클래스의 또다른 정의

 ① 설계도

 ② 데이터 + 함수

 ③ 사용자가 정의 타입


변수와 메서드

 -선언위치에 따른 변수의 종류


  - 클래스변수 (cv) : 객체를 만들지 않아도 사용 가능하다. (항상 사용가능한 상태)

  - 인스턴스변수 (iv) : 객체를 생성해야 사용 가능하다.

클래스변수와 인스턴스변수의 차이

 - 클래스변수(static) : 속성들이 공통으로 가지는 값.

 - 인스턴스 변수 : 속성들이 개별로 가지는 값.

카드예제) 폭, 높이


메서드(기능)

 - 작업을 수행하기 위한 명령문의 집합

 - 특정 작업을 수행하는 문장을 하나로 묶은 것이다. 

 - 어떤 값을 입력받아서 처리하고 그 결과를 돌려준다. 

   (입력받는 값이 없을 수도 있고, 결과를 돌려주지 않을 수도 있다.) 

   return : 반환하는 값이 있는 경우 ↔ void : 반환하는 값이 없는 경우

메서드의 장점 

 1) 높은 재사용성

 2) 중복된 코드의 제거

 3) 프로그램의 구조화

메서드의 선언과 구현

 (예제를 통해..)

→ 단, 매개변수의 개수가 다르면 안되며, 입력받은 매개변수의 타입이 다르면 안된다.

    구현부를 작성할 때 값이 적절한지 확인하기위해 if문으로 유효성체크를 해주는 것이 좋은 코드이다.


JVM(Java Virtual Machine)의 메모리구조

 응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고

 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다

 그 중 3가지 주요 영역으로 1. Method Area 2. Call Stack 3. Heap 영역이 있다.



  1. Method Area(메소드 영역) : 클래스정보와 클래스변수가 저장되는 곳

  2. Call Stack(호출스택) : 메서드 실행공간 ,  작업을 마치면 메모리를 반환한다.

  3. Heap (힙) : 객체(인스턴스)가 생성되는 공간 (+배열)

 호출스택의 특징

  1) 메서드가 호출되면 수행에 필요한 메모리를 스택에 할당받는다.

  2) 메서드가 수행을 마치면 사용했던 메모리를를 반환한다.

  3) 호출스택 제일 위에 있는 메서드가 현재 실행중인 메서드이다.

  4) 아래에 있는 메서드가 바로 위에 메서드를 호출한 메서드이다.

--P262 6-7 예제---

객체를 생성하지 않고 메서드를 호출할 수 있으려면, 메서드 앞에 'static'을 붙혀야한다.

<예제 실행 시 호출스택의 변화>


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

 매개변수의 타입이 기본형인 경우 기본형 값이 복사, 참조형이면 인스턴스의 주소가 복사된다.

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

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

 --264 예제 6-9, 6-10 차이를 실습후 설명--

참조형 반환타입

 반환타입이 '참조형'이라는 것은 메서드가 '객체의 주소'를 반환한다는 것을 의미한다.

--268 예제와 설명 (이해가 덜 됬다..)


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

 앞에서 비슷한 주제로 클래스변수와 인스턴스변수가 있었다.

 변수와 마찬가지로 메서드 앞에 static이 붙어있으면 클래스메서드, 그렇지않으면 인스턴스메서드 이다.

클래스메서드(static) 

 - 인스턴스와 관계없는 메서드 → 인스턴스변수나 인스턴스메서드를 사용하지 않는다

 - 객체 생성없이 호출할 수 있다.

 - 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙힌다

 - 인스턴스변수를 사용할 수 없다. → 클래스멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수 있기 때문

 - 메소드 영역이기 때문에 항상 사용가능하다.

인스턴스메서드

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

 - 인스턴스를 생성해야만 호출할 수있다.

 - 인스턴스메서드에서 클래스메서드를 호출 할 수 있다.

--예제 6-19--p279

클래스 멤버와 인스턴스 멤버간의 참조와 호출

--예제 6-20--p281 해보면 알수있다.


오버로딩

 오버로딩(메서드 오버로딩) : 하나의 클래스에 여러 개의 메소드를 정의하는 것

 오버로딩의 조건

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

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

  3) return 타입만 다른경우 오버로딩이 성립하지 않는다.

→ 장점 : 같은 기능을 하는 메서드들을, 서로 다른이름으로 정해주지 않아도 된다 

   ex) void println()

  void printlnBoolean(boolean x)

  void printlnChar(char x)

  .............................


생성자 : '인스턴스 초기화 메서드'  → 인스턴스 변수에 적절한 값을 저장하는 것

 생성자 조건

  1) 생성자의 이름은 클래스의 이름과 같아야 한다.

  2) 생성자는 리턴 값이 없다.

  3) 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

기본생성자 

 - 매개변수가 없는 생성자

 - 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한한다.

--생성자 예제--6-24 p294

생성자에서 다른생성자 호출하기 - This(), this

this() : 같은 클래스의 다른 생성자를 호출할때 사용한다. → 생성자의 이름으로 클래스 이름대신 this() 사용한다.

    생성자의 첫 문장에서만 가능하다.

this :  인스턴스변수와 지역변수를 구별하기 위해 사용한다.

  인스턴스 자신을 가르키는 참조변수로 모든 인스턴스 메서드에서 사용할 수 있다.

--예제 6-25--p296


변수의 초기화

 멤버변수는 자동초기화(선택적),  가능하면 선언과 동시에 적절한 값으로 초기화

 지역변수는 사용하기전에 반드시 초기화해야 한다.

멤버변수의 명시적 초기화와 초기화블럭


 클래스변수의 초기화시점 : 클래스 처음 로딩될때 단 한번 초기화

 인스턴스변수의 초기화시점 : 인스턴스가 생성될 때마다 각 인스턴스별로 초기화

 클래스변수의 초기화순서 : 기본값(기본) -> 명시적초기화(간단) -> 클래스 초기화블럭(복잡) 

 인스턴스변수의 초기화순서 : 기본값(기본) -> 명시적초기화(간단) -인스턴스 초기화블럭 -> 생성자(복잡)

ex ) 기본 : int i;

      명시 : static int cv = 1;  int iv =1;

      초기화블럭 : static { cv=2;}//클래스 초기화블럭 { iv =2;} //인스턴스 초기화블럭

      생성자 : InitTest(){

iv =3;}

 




 

   




'프로그래밍 > Java' 카테고리의 다른 글

7. 예외처리  (0) 2018.05.07
6.객체지향개념2  (0) 2018.05.06
4. 배열  (0) 2018.05.01
3. 조건문과 반복문  (0) 2018.05.01
2. 연산자 (Operator)  (0) 2018.05.01