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 |