this는 참조변수로 인스턴스 자신을 가리킨다. this로 인스턴스변수에 접근이 가능하다.

this는 인스턴스 멤버만 사용이 가능하며 클래스 메서드는 사용이 불가하다.

 

 

Car(String color, String gearType, int door){
//this.color = iv , color = lv

this.color = color;
this.gearType = gearType;
this.door = door;


}

위와 같이 iv,lv의 이름이 같은경우 this를 이용하여 구분한다.

 

 

this -> 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있음.

this()-> 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용

'JAVA > 객체지향, 클래스' 카테고리의 다른 글

생성자에서 다른 생성자 호출하기  (0) 2022.07.26
매개변수가 있는 생성자  (0) 2022.07.26
생성자  (0) 2022.07.26
오버로딩(overloading)  (0) 2022.07.26
메서드간의 호출과 참조  (0) 2022.07.26

this()

 

생성자 간에 서로 호출을 하려면 다음과 같은 규칙을 만족해야함

1. 생성자의 이름으로 클래스이름 대신 this를 사용할 것

2.한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.

 

오류의 예시

Car(String color){
	door = 5;				//다른 생성자의 호출이 첫째줄이 아니다.
	Car(color,"auto",4);	//this(color,"auto",4);로 해야함

}

 

 


public class this1 {
    public static void main(String args[]){

        Car2 c1 = new Car2();
        Car2 c2 = new Car2("blue");     //생성자의 매개변수 유무를 이용함

        System.out.println("c1의 color :" +c1.color + " , gear :"+ c1.gear +"door :" + c1.door);
        System.out.println("c1의 color :" +c2.color + " , gear :"+ c2.gear +"door :" + c2.door);
    }
}

//class 만들자

class Car2{

    //변수
    String color;
    String gear;
    int door;

    //생성자
    Car2() {    //매개변수가 없는 기본 생성자  (생성자는 인스턴스 초기화 메서드임을 잊지 말자)
        this("white","auto",4);
    }

    Car2(String color){
        this(color,"auto",4);   //매개변수가 있는 생성자
    }

    Car2(String color, String gear, int door){

        this.color = color;
        this.gear = gear;
        this.door = door;

    }

}

매개변수로 아무것도 주어지지 않는다면 white ,auto,4가 기본적으로 들어갈것이다.

'JAVA > 객체지향, 클래스' 카테고리의 다른 글

객체 자신을 가리키는 참조변수 -this  (0) 2022.07.26
매개변수가 있는 생성자  (0) 2022.07.26
생성자  (0) 2022.07.26
오버로딩(overloading)  (0) 2022.07.26
메서드간의 호출과 참조  (0) 2022.07.26

public class constructo2 {
    public static void main(String args[]){
        
        //객체 생성
        Car c1 = new Car("black","auto",4);
        
        //매개변수를 가진 생성자를 사용하면 코드를 간결하고 직관적으로 만든다.
        
        
        
    }
}

class Car{
    //변수
    String color;   //색상
    String gearType;    //auto, manual
    int door;
    
    //기본생성자 클래스 만들면 무조건 생성해주기
    Car() {}
    
    Car(String c, String g, int d){         //매개변수가 있는 생성자
        
        color = c;
        gearType = g;
        door = d;
        
    }
    
}

 

'JAVA > 객체지향, 클래스' 카테고리의 다른 글

객체 자신을 가리키는 참조변수 -this  (0) 2022.07.26
생성자에서 다른 생성자 호출하기  (0) 2022.07.26
생성자  (0) 2022.07.26
오버로딩(overloading)  (0) 2022.07.26
메서드간의 호출과 참조  (0) 2022.07.26

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

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

 

생성자 정의 방법

클래스이름(){}

 

연산자 new가 인스턴스를 생성하는 것이다. 생성자가 인스턴스를 생성하는 것이 아니다.

 

Tv t = new Tv(); // Tv() 생성자

(인스턴스의 생성)

 

public class constructor {
    public static void main(String args[]){

        Data_1 d1 = new Data_1(); //연산자 new가 인스턴스를 생성하는 것이다. 생성자가 인스턴스를 생성하는 것이 아님.
        Data_2 d2 = new Data_2(); // 오류발생함 Data_2에 기본 생성자가 없어서




    }
}
// 따라서 앞으로 클래스 만들때에는 기본생성자를 생성하는 습관을 들이도록 하자.

//class 생성
class Data_1 {          //생성자를 아무것도 안 만들어주어서 컴파일러가 기본생성자 생성해줌
    int value;
}

class Data_2{
    int value;

    Data_2(){}          //기본 생성자 만들어주면 오류 해결임

    Data_2(int x){      //매개변수가 있는 생성임
        value = x;

    }

}

기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐이다.

 

클래스 정의할때 기본생성자 생성하는 습관 들일것.

'JAVA > 객체지향, 클래스' 카테고리의 다른 글

생성자에서 다른 생성자 호출하기  (0) 2022.07.26
매개변수가 있는 생성자  (0) 2022.07.26
오버로딩(overloading)  (0) 2022.07.26
메서드간의 호출과 참조  (0) 2022.07.26
매개변수  (0) 2022.07.25

(메서드)오버로딩이란? 

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

 

오버로딩의 조건

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

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

 

public class Ex6_10 {
    public static void main(String args[]){

        //객체 생성
        Mymath3 mm = new Mymath3();
        System.out.println("mm.add(3, 3) 결과:"   + mm.add(3,3));
        System.out.println("mm.add(3L, 3) 결과 :" + mm.add(3L,3));
        System.out.println("mm.add(3,3L) 결과 :"  + mm.add(3,3L));
        System.out.println("mm.add(3L,3L) 결과 :" + mm.add(3L,3L));



        int[] a = {100,200,300};
        System.out.println("mm.add(a) 결과: " + mm.add(a));
    }
}


//클래스 정의
class Mymath3 {
    //메서드 정의        메서드의 이름이 똑같다 그러나 매개변수의 타입이 다르다.
    int add(int a, int b){

        System.out.print("int add(int a, int b) - ");
        return a+b;

    }

    long add(int a, long b){

        System.out.print("long add(int a, long b) - ");
        return a+b;

    }
    long add(long a, int b){

        System.out.print("long add(long a, int b) - ");
        return a+b;

    }
    long add(long a, long b){

        System.out.print("long add(long a, long b) - ");
        return a+b;

    }


    int add(int[] a){

        System.out.print("int add(int[] a) - ");
        int result = 0;
        for (int i = 0; i < a.length; i++){
            result += a[i];
        }
        return result;
    }


}

 

실행 창

 

int add(int a, int b) - mm.add(3, 3) 결과:6
long add(long a, int b) - mm.add(3L, 3) 결과 :6
long add(int a, long b) - mm.add(3,3L) 결과 :6
long add(long a, long b) - mm.add(3L,3L) 결과 :6
int add(int[] a) - mm.add(a) 결과: 600

 

 

 

println문이 실행이 되기전에 mm.add(3, 3)이 먼저 호출이 되어 문장이 완성된 다음 println문이 실행되기 때문에 저러한 출력이 나온다.

 

'JAVA > 객체지향, 클래스' 카테고리의 다른 글

매개변수가 있는 생성자  (0) 2022.07.26
생성자  (0) 2022.07.26
메서드간의 호출과 참조  (0) 2022.07.26
매개변수  (0) 2022.07.25
호출 스택 (call stack)  (0) 2022.07.25

인스턴스 메서드 -> 객체를 생성해야 호출이 가능하다

 

인스턴스 메서드는 iv, cv(인스턴스 변수, 클래스 변수) 사용이 가능하다.

인스턴스 메서드는 인스턴스 메서드, 클래스 메서드 호출이 가능하다.

 

클래스 메서드 -> 객체 생성없이 호출이 가능하다

 

클래스 메서드(static 메서드)는 iv 사용이 불가하다 -> 왜?

그 이유는 클래스 메서드는 객체 생성없이 사용이 가능한데 iv는 객체를 생성해야 사용이 가능하기 때문에

클래스 메서드에서 iv를 사용하는 시점에서 객체가 생성이 되었는지 안되었는지 알 수 없기 때문이다.

이와 같은 맥락으로 인스턴스 메서드 호출 역시 불가하다

클래스 메서드에서 클래스 메서드는 호출이 가능하다

'JAVA > 객체지향, 클래스' 카테고리의 다른 글

생성자  (0) 2022.07.26
오버로딩(overloading)  (0) 2022.07.26
매개변수  (0) 2022.07.25
호출 스택 (call stack)  (0) 2022.07.25
메서드란?  (0) 2022.07.25

기본형 매개변수 - 변수의 값을 읽기만 할 수 있다.

8개 (int , long ,....)

 

참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다.

(사실상 참조변수) 주소를 전달하는 거임 

 

static 메서드 , 인스턴스 메서드

 

class MyMath2 {
	long a, b;
    
    long add() {		//인스턴스 메서드
    
    	return a + b;
  
    }
	
    
    
    static long add(long a, long b) { 	//클래스 메서드(static 메서드)
    
    	return a + b;
    
    
    }







}

iv의 사용여부에 따라 달라짐

 

 

인스턴스 메서드

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

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

메서드 내에서 인스턴스 변수 사용가능

객체 만들고 호출해야함

참조변수.메서드이름();

 

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

객체생성 없이 클래스이름.메서드이름()으로 호출.   ex) -> Math.random(), Math.round()

인스턴스 멤버와 관련없는 작업을 하는 메서드

메서드 내에서 인스턴스 변수 사용불가

호출시 클래스이름.메서드이름();

 

 

그렇다면 static을 언제 사용해야 하는걸까??

 

메서드에 사용시

iv(인스턴스 변수)를 사용하지 않을때 사용하자

 

static long add(long a, long b) {return a + b;}  //a,b는 지역변수.     iv사용 안함

 

 

변수에 static 사용시

속성중에서 공통 속성에 static을 붙인다.

cv(클래스 변수)

 

 

 

객체 -> (iv(인스턴스 변수) 묶음)

 

'JAVA > 객체지향, 클래스' 카테고리의 다른 글

오버로딩(overloading)  (0) 2022.07.26
메서드간의 호출과 참조  (0) 2022.07.26
호출 스택 (call stack)  (0) 2022.07.25
메서드란?  (0) 2022.07.25
선언위치에 따른 변수(타입)의 종류  (0) 2022.07.22

스택이란?

->밑이 막힌 상자, 선입 후출

 

 

호출 스택

-> 메서드 수행에 필요한 메모리가 제공되는 공간

메서드가 호출되면 호출 스택에 메모리 할당, 종료되면 해제

 

'JAVA > 객체지향, 클래스' 카테고리의 다른 글

메서드간의 호출과 참조  (0) 2022.07.26
매개변수  (0) 2022.07.25
메서드란?  (0) 2022.07.25
선언위치에 따른 변수(타입)의 종류  (0) 2022.07.22
객체의 생성과 사용 - 예제  (0) 2022.07.14

+ Recent posts