My footsteps

기본형 매개변수, static과 인스턴스 매서드,생성자,상속 본문

예습/이론

기본형 매개변수, static과 인스턴스 매서드,생성자,상속

밀김 2023. 1. 4. 10:53
728x90

 

 

 

 

 

- 기본형 매개변수 : 변수의 값을 읽기만 할수 있다 / 참조형 매개변수 :  변수의 값을 읽고 변경가능

 

- 참조형 매개변수를 사용하면 객체를 다룰수 있는 리모컨을 쥐어주는것과 똑같다. 매서드에게 참조형 매개변수를 통해 

객체의 주소를 전달해주면 다른 매서드에서 객체를 읽을수도, 쓸수도 있다.

 

 

 

1. public static void main(String[] args) 

2~3. Data2 d = new Data2();

4. d.x =10;

 

 

  5~6. System.out.println("main() : x =" + d.x);

 

 

7. change(d);

8~9. static void change(Data2 d) { d.x = 1000;

 

 

10~12. Ststem.out.println("change() : x =" + d.x);

 

 

13~14. System.out.println("After change(d)");

 

15. System.out.println("main() : x =" +d.x);

 

 

 

 

 

 

 

- statice 매서드 == 클래스 매서드 (객체생성 안함)

 

 

 


class MyMath2 {  // MyMath 클래스 생성
   long a,b ; // iv(=객체 a,b)
   long add () 
      return a  + b;  // iv
}
// 인스턴스매서드 범위

static long add (long a, long b) {   // lv(=a,b 지역변수,매개변수)
        return a+b; // lv 
   }
}   
// 클래스(static)매서드 범위


* 지역,참조 나누는건 범위에서 더 가까운쪽으로 따진다 
* iv(=객체)는 매개변수(=입력값)이 없다,그 말은 즉 lv는 iv(=객체)가 필요없음. 그래서 클래스 자체를 바로 호출함
* 객체는 변수묶음이고, iv는 객체묶음
* ( ) 이 괄호에 매개변수(=입력값)이 있으면 지역변수(=lv),없으면 인스턴스 변수(=iv)

 

 

- 오버로딩 : 한 클래스 안에 같은 이름의 매서드 여러개 만드는것 ex)println( ) 하고 뒤 괄호에 다양한 매서드 넣는것

 

- 오버로딩 성립 조건

  1. 매서드 이름이 같아야 한다. 

  2. 매개변수의 개수 또는 타입이 달라야 함

  3. 반환 타입은 노상관

 

  오버로딩 성립한 ex)

  long add(int a, long b) { return a+b;}

  long add(long a, lint b) { return a+b;}

// 맨앞 반환타입 long 같은거 노상관 > 3번 성립 

   그 뒤에 add 매서드 이름 같음 > 1번 성립

   매개변수의 갯수는 같지만 long,int 서로 다름 >  2번 성립

 

 

 

- 초기화: 내가 원하는 값을 넣어주는것

 

- 기본생성자는 생성자가 하나도 없을때만 컴파일러가 자동으로 기본생성자를 추가해준다.

만약 생성자가 있는데도 기본생성자를 안만들어주면 에러가남

ex) Data() { } 이런식으로 공백괄호들이 기본 생성자

 

 

 

 

 

매개변수가 있는 생성자쪽 코드들이 초기화 하고 있는것.

 

 

 

- 생성자 this() : 생성자에서 다른 생성자 호출할때 사용 가능, 다른 생성자 호출시 첫줄에서만 사용가능

 

 


- 참조변수 this (생성자 this랑 완전 다른거임!!)
 1. 인스턴스(=객체) 자신을 가리키는 참조변수
 2. 인스턴스 매서드(생성자 포함)에서 사용가능
 3. 지역변수(lv)와 인스턴스변수(iv)를 구별할때 사용 (iv앞에 this 붙여서 구분)
 4. 생략가능
 5. 클래스매서드(=static 매서드) 에서 참조변수 this 사용 불가 / 생성자(lv와 iv구분할려고) 와 인스턴스 매서드(객체. 자기 홈그라운드)에서만 사용가능

 

 

- 지역변수(Iv)는 수동초기화를 사용전에 꼭 해야한다 , 반대로 멤버변수(iv, cv)는 자동초기화 됨

 

 


*초기화 종류*

1. 명시적 초기화 (대입연산자 =) 
class Car {
         int door =4;  // 기본형변수의 초기화
         Engine e = new Engine();  }  // 참조형변수의 초기화,null인 e에다가 뭘 넣어줘야 초기화가 된다.


2. 초기화 블럭(복잡한 초기화때 사용)
인스턴스(iv) 초기화 블럭 { } 
클래스(cv) 초기화 블럭 static { }
// 근데 이거 거의 안씀

3. 생성자(복잡한 초기화, iv 초기화)



- 클래스 변수 초기화 시점 : 클래스가 처음 로딩될때 단 한번
- 인스턴스 변수 초기화 시점 : 인스턴스가 생성될때마다
- 초기화 순서는 cv(클래스) → iv(인스턴스)
- 자동 → 간단 → 복잡

 

 

 

- 상속 :  기존의 클래스를 새로운 클래스로 작성하는것. 코드의 재사용, 두 클래스를 부모와 자식관계로 맺어줌

(잘 안씀. 거의 포함으로씀)

          

- 자손은 조상의 모든 것을 상속받는다 (단, 생성자와 초기화블럭은 제외) , 자손은 부모보다 적을수 없다. 같거나 많음,

자손의 변경은 조상에 아무 영향을 미치지 않음

ex) 

class point { int x; int y; } 

▶ class point3D extends point { int z; } // point클래스를 부모로 둬서 그 값들 모조리 다 상속받아 point3D는 

                                                                  int x,y,z 멤버3개를 갖게 됨

 

 

 

- 상속 : A는 B이다 / 포함 ;  A는 B를 갖고있다 

 

 

 

 

 

 

 

 

 

 

728x90