❓ 생성자

- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'

- 인스턴스 생성시 수행할 작업(iv 초기화)에 사용

Time t = new Time(); // 객체생성
t.hour = 12;
t.minute = 34;        => iv초기화
t.second = 56;

    ↓
Time t = new Time(12,34,56);     // 생성자 호출 , 생성자 추가해야 사용가능

- 이름이 클래스 이름과 같아야 한다.

- 리턴값이 없다.(void 안붙임)

- 모든 클래스는 반드시 생성자를 가져야 한다. (하나 이상)

class Card{
	Card() { // 매개변수 없는 생성자.
    	// 인스턴스 초기화 작업
}

	Card(String kind, int number) { // 매개변수 있는 생성자 
    	//인스턴스 초기화 작업
}        
    
    => 생성자 오버로딩

👀 기본 생성자

- 매개변수가 없는 생성자

- 생성자가 하나도 없을 때만, 컴파일러가 자동 추가

=> Data_1 클래스는 생성자가 없음->컴파일러가 기본생성자 자동 추가

=> Data_2  오류

      -> Data_2 클래스는 생성자가 있지만, 매개변수가 있기 때문에 매개변수가 없는

     기본 생성자를 따로 만들지 않는다

      -> Date_2() { } 생성자를 만들어줘야 오류가 안 남

 

👀 매개변수가 있는 생성자

 

 

 

❓오버로딩

한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것

 

▶오버로딩이 성립하기 위한 조건

 

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

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

 3. 반환 타입은 영향없다.

 

=> 오버로딩 아님 , 타입이 달라야 하는데 같기 때문

=> 오버로딩 아님 , 타입이 같고 반환타입은 영향을 미치지 않기 때문

=> 오버로딩 성립

 

▶오버로딩의 올바른 예 - 매개변수는 다르지만 같은 의미의 기능 수행

 

❗ static 메서드 : 메서드 앞에 static 메서드가 붙은 것(=클래스 메서드)

 

👀 인스턴스메서드

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

- 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드

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

 

👀 static 메서드(클래스메서드)

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

- 인스턴스 멤버(iv,im)와 관련없는 작업을 하는 메서드

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

 

=>  iv(인스턴스 변수) 사용여부에 따라 구분

class MyMath2 {
 	  long a, b;
      
      long add() { //인스턴스 메서드(iv사용)
           return a + b; // a,b -> 인스턴수변수(iv)
     
     }
     
     static long add(long a, long b){ //클래스메서드(static메서드) // long a,long b->지역변수
      	  return a + b; // a,b -> lv(지역변수)
     }
     
  }   
  
  class MyMathTest2{
    public static void main(String args[1]}]
     	   System.out.println(MyMath2.add(200L,100L); //클래스메서드 호출 // 클래스이름.메서드이름
           MyMath2 mm = new MayMath2(); //인스턴스 생성
           mm.a = 200L;
           mm.b = 200L;
           System.out.prinln(mm.add()); //인스턴스 메서드 호출 // 객체생성 후 호출할 수 있음
     }
}

 

 

❓ static을 언제 붙여야 할까?

 

▶static 메서드는 인스턴스 변수(iv)를 사용할 수 없다.

Class TestClass2{
	int iv;   			//인스턴스 변수, 객체 생성 후 사용가능
    static int cv;		//클래스 변수, 언제나 사용가능
    
    void instanceMethod(){ 			// 인스턴스 메서드, 객체 생성후 호출가능
    	System.out.println(iv); 	// 인스턴스 변수를 사용할 수 있다.
        System.out.println(cv); 	// 클래스 변수를 사용할 수 있다.
    }
    void instanceMethod(){ 			// static 메서드 
    	System.out.println(iv); 	// 인스턴스 변수를 사용할 수 없다. why? 인스턴스 변수는 객체 생성후 호출 가능하기 때문
        System.out.println(cv); 	// 클래스 변수를 사용할 수 있다.
    }    
}// end of class

 

▶static 메서드는 인스턴스 메서드(iv)를  호출할 수 없다.

 

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

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

 

✔예제)

↳  x= 10

↳   x ->10 -> 1000으로 변경된다 (지역변수이므로 change메서드 안에서만 유효)

결과

main() : x = 10
chage() : x = 1000
After change(d.x)
main() : x = 10

 

👀스택(stack) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다.

             

넣을 때
꺼낼 때


  • 메서드 수행에 필요한 메모리가 제공되는 공간
  • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제

메인메서드 실행                                      메인메서드는 대기,prinln은 실행

  • 아래 있는 메서드가 위의 메서드를 호출한 것
  • 맨 위의 메서드 하나만 실행 중, 나머지는 대기 중

✔예제)

 

❓ return문

 

실행 중인 메서드를 종료하고 호출한 곳으로 되돌아 간다.

반환타입이 void가 아닌 경우, 반드시 return문 필요

❗ 에러 return 문이 없음 (조건식이 참일때만 리터문이 있기 때문에 )

      ⬇아래와 같이 바꿔준다

 

 

 

 

❓ 메서드란

 

1.문장들을 묶어 놓은 것

2. 값(입력)을 받아서 처리하고, 결과를 반환(출력)

- 작업단위로 문장들을 묶어서 이름 붙인 것, 클래스안에 들어가 있어야함

 

  ✔ 메서드 사용 예) 왼쪽 -> 오른쪽 (코드중복 제거를 위해 )

                                                                  

🔸 메서드의 장점

- 코드의 중복을 줄일 수 있다.

- 코드의 관리가 쉽다.

- 코드를 재사용할 수 있다.

- 코드가 간결해서 이해하기 쉬워진다.

 

🔸 메서드의 작성

- 반복적으로 수행되는 여러 문장을 메서드로 작성

- 하나의 메서드는 한 가지 기능만 수행하도록 작성

메서드 = 선언부 + 구현부

 (타입 변수명, 타입 변수명, ...)  -> 매개변수(입력) -> 작업에 필요한 값들을 입력 (0~n개 입력가능)
 반환타입 : 작업결과를 출력할때의 타입

 

지역변수(lv) : 메서드 내에 선언된 변수

int add(int x, int y){
	int result = x + y;
    return result;
}
int add(int x, int y){
	int result = x * y;
    return result;
}

 ✔서로 다른 메서드 영역을 가지고 있어 겹치지 않기 때문에  변수 이름이 같아도 괜찮다.

 

 

영역 1.클래스영역 - 선언문만 가능

                                iv(인스턴스 변수) : 객체(iv 변수를 묶어놓은것)가 생성되면 만들어진다,

                                cv(클래스 변수,stactic +iv) : 자동으로 생성(객체생성 안해도 됨), 아무때나 사용가능

         2.메서드영역- lv(지역변수)  : 메서드선언(메서드정의) , 메서드 안에서만 유효

  ✔ 1번과 2번의  순서는 상관없음

+ Recent posts