본문 바로가기

Web Programming/Java

[BASIC JAVA] 12.OOP : 객체지향 프로그래밍_01

OOP ( Object Oriented Programming ) : 객체지향 프로그래밍

1. 객체지향언어

  - 기본의 프로그램언어에 몇 개의 새로운 규칙을 추가한 보다 발전된 형태이다.
  - 규칙들을 이용해서 코드간에 서로 관계를 맺어 줌으로 써  보다 유기적으로 프로그램을 구성한다.
  - 객체지향언어의 특징
    : 코드의 재사용성이 높다.
    : 코드의 관리가 용이하다.
    : 신뢰성이 높은 프로그래밍을 가능하게 한다.
    


2. 클래스와 객체

  - 클래스란?
    : 객체를 정의해 놓은것. 
    : 객체의 설계도 또는 틀이다.
    : 레시피, Tv설계도...
 
     클래스                 객체
     제품설계도           제품
     Tv설계도              Tv

  - 클래스의 선언

[접근제어자][지정예약어] class 클래스명 [extends 클래스명][implements 인터페이스명]{}
public   static  class  Child  extends  Parent  implements  Serializable{}

   
  - 객체란?
    : 실제로 존재하는 것, 사물 또는 개념 
  
  - 객체의 구성요소
    : 속성( 맴버변수, 특성, 필드, 상태 )
      => 크기, 길이, 높이, 색상, 볼륨, 채널....
    : 기능 ( 메서드, 행위, 함수 )
      => 켜기, 끄기 , 볼륨높이기.... 
 


3. 인스턴스란?

  - 클래스로부터 객체를 만드는 과정을 인스턴스화라고 한다.
  - Tv클래스로부터 만들어진 객체를 Tv클래스의 인스턴스라고 한다.
  
  - 인스턴스 생성방법
    : 클래스명 변수명;              => 클래스의 객체를 참조하기 위한 참조변수를 선언
    : 변수명 = new 클래스명();   => 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
    : 인스턴스친구(변수,메서드)는 참조변수를 통해서만 다룰수 있으며,
      참조변수의 타입은 인스턴스의 타입과 일치해야한다.
      // t의 타입은 Tv의 인스턴스를 저장해야하기 때문에 Tv 타입이여야한다 Tv t;


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

  - 전역변수(클래스 변수, 인스턴스 변수), 지역변수
  
  - 인스턴스 변수
    : 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할때 메모리에 로드된다.
    : 인스턴스변수의 값을 읽어 오거나 저장하기 위해서는 먼저 인스턴스를 먼저 생성해야 한다.
    : 인스턴스는 독립적인 저장공간을 가지므로 서로다른 값을 가질수 있다.
    : 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우; 인스턴스 변수로 선언한다.
    
  - 클래스변수
    : 모든이스턴스가 공통된 저장공간(변수)를 공유하게 된다.
    : 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우 클래스변수로 만든다.
    : 인스턴스변수 앞에 static 만 붙이면된다.
    
  - 지역변수
    : 메서드내에 선언되며 메서드 내에서만 사용할 수 있다.
    : 메서드 종료시 소멸되게 된다.
    : for문이나 while등 {}내에서만 사용 가능하다.
 

5. 메서드

  - 어떠한 작업을 수행하기 위한 명령문의 집합.
  - 주로 어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.
  - 입력받는 값이 없을수도 그 결과를 반환하지 않을수도 있다.
  - 반복적으로 사용되는 코드를 줄이기 위해서 사용한다. 
    => 코드양이 줄고 유지보수가 편리하다.
  - 작성방법 // 메서드 생성하는법

반환타입 메서드명(변수타입 변수명,변수타입 변수명,....){  // 매개변수
	// 수행될 문장...
	return 반환값;   //반환값이 먼저만들어짐 반환값과 반환타입이 같은 타입이여야한다.
}

 

int add(int a, int b){  //메서드의 명칭 // 인트타입을 두개받아야한다. 변수명은 중요하지않고 타입과 갯수가 중요하다
	// 수행될문장   int result = a+b;
	 return result ; 돌려주는것 돌려주는타입을 봔한타입에 넣어줘야한다. int add
}


 
6. return 문 

  - 메서드가 정상적으로 종료되는 경우
    : 메서드의 블력{}내의 마지막 문장까지 수행하였을때.
    : 메서드의 블력{}내에서 return문을 만났을때.  //break와 비슷함. 만나는순간 메서드를 나가버림
     
  - 반환값
    : 없는 경우에는 return문만 써주면 된다.  // 돌려주는게 없을땐 return; 을적고 봔한타입은 void가 된다. 
      return; // 생략가능
    : 있는 경우에는 return문 뒤에 반환값만 써주면 된다.
      return 반환값;
      
  - 메서드의 반환타입은 return 반환값 << 타입과 동일해야한다.
    반환값이 없는경우에는 반환타입이 void가 된다.
  


7. 메서드 호출 

  - 클래스메서드
    : 클래스명.메서드명();  // 해당메서드가 아무것도 안받고 아무것도 돌려주지 않을때 사용  
    // OOP_01.add(10,20); 호출시에는 값을 받아야한다.
    // 값을 가지기 때문에 int result = OOP_01.add(10,20); 변수타입은 add의 반환타입과 일치해야한다.
    : 클래스명.메서드명(값1, 값2,......);
  
  - 인스턴스 메서드
   : 인스턴스를 생성하여 참조변수에 해당 주소를 저장한다.
   : 참조변수명.메서드명();

8. 매개변수

  - 메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개변수로 복사해서 넘겨준다.
  - 기본형 매개변수
    : 단순히 저장된 값만 복사한다.
    : 변수의 값을 읽기만 할수 있다.
  - 참조형 매개변수
   : 인스턴스의 주소가 복사된다.
   : 변수의 값을 읽고 변경할 수 있다.


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

  - 클래스멤버에서 인스턴스 멤버를 호출할 수 없다.
  - 클래스멤버에서 클래스 멤버를 호출할 수 있다.
  - 인스턴스 멤버에서 클래스 멤버를 호출할 수 있다.
  - 인스턴스 멤버에서 인스턴스 멤버를 호출할 수 있다.


10. 재귀호출(recursive call)

  - 메서드 내에서 메서드 자기자신을 다시 호출하는 것.
  

11. 메서드 오버로딩  // 오버라이딩의 차이점알기  

  - 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것.  
    // 메서드이름이 같은데 받는값에따라 다다른 메서드를 같은이름으로 해놓음
  - 대표적인 예가 println()이다.
  - 조건
    : 메서드의 이름이 같아야 한다.
    : 매개변수의 개수 또는 타입이 달라야한다. // 둘중하나만 달라도됨
    : 반환타입은  의미가 없다. 같아도 되고 달라도 된다.
    // 부를때는 메서드명칭과 매개변수만 보고 본다 반환타입은 뭘도려주는지만 확인하는것이다 
  
  - 오버로딩의 장점
    : 메서드의 이름으로만 구별된다면, 한 클래스내의 모든 메서드의 이름이 달라야 한다.
    : 근본적으로 같은 기능을 하는 것인데 다른 이름으로 표현되면 기억하기 어렵다.
    : 메서드의 이름을  짓는데 고민을 덜 수 있다.


12. 생성자

  - 인스턴스가 생성될때 호출되는 인스턴스 초기화 메서드이다.  
    //MyAdd over = new MyAdd(); 에서 MyAdd()
  
  - 특징
    : 메서드처럼 클래스 내에 선언된다. 
    // 없는 경우에는 컴파일되면 자동으로 MyAdd(){} 가 자동으로 생긴다 
    // MyAdd(int a){} 모양이라도 한개라도 있으면 기본생성자도 만들지 않는다.
    // 위에서 오류가난다.
  
    // 모든생성자는 반환타입이 없기때문에 리턴값생략가능
    : 리턴값이 없다.
   (생성자도 메서드 이기때문에 리던값이 없는 void를 적어주어야 하지만 모든 생성자는 
   리턴값이 없기 때문에 생략한다.)
  
  - 정의방법
   : 기본생성자 

클래스명 (){
		  	         
}


   : 매개변수가 있는 생성자

클래스명 (변수타입 변수명....){
            
}

 

13. 변수의 초기화

  - 변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화'라고 한다.  
  - 명시적초기화
     int a = 10;
  - 생성자를 이용한 초기화
  - 초기화 블럭을 이용한 초기화
    : 복잡한 초기화 식일때 많이 사용된다.

'Web Programming > Java' 카테고리의 다른 글

[BASIC JAVA] 14.EXCEPTION  (0) 2021.06.19
[BASIC JAVA] 13.OOP : 객체지향 프로그래밍_02  (0) 2021.06.19
[BASIC JAVA] 11.ARRAY_02  (0) 2021.06.19
[BASIC JAVA] 10.ARRAY_01  (0) 2021.06.17
[BASIC JAVA] 9.SENTENCE_02  (0) 2021.06.17