객체(인스턴스)자신의 참조(번지)를 가지고 있는 키워드이다.

힙 영역에 생성되어있는 객체를 이 객체 위치를 스택에 생성되는 참조 변수가 힙 영역의 객체의 위치를 가지는데 

이 this는 스택에 생성되는것이 아니라 힙 영역의 객체 내부에 생성된다.

 

this는 객체 내부에서 인스턴스 멤버임을 명확히 하기 위해 this.를 붙일 수 있다.

 

Car(String model){ 	   //생성자 
	this.model = model;  //객체가 가지고 있는 필드! 
}

void setModel(String model){  //메서드 
	this.model = model;   //메서드의 매개변수 이름과 필드명이 동일할 경우 this.을 사용
}

//this. 키워드를 사용하여 객체의 필드나 객체의 메서드의 접근 가능!
this.fieldName
this.method();

즉,  this.를 사용하여 객체에 있는 필드나 객체에 있는 메서드에 접근하여 사용할 수 있는 키워드이다.

 

 

'JAVA' 카테고리의 다른 글

[JAVA] GUI(AWT)  (0) 2020.09.16
[JAVA] 추상클래스  (0) 2020.09.14
[JAVA] 생성자 오버로딩  (0) 2020.09.11
[JAVA] 클래스와 객체 -1  (0) 2020.09.08
[JAVA] 메소드-3  (0) 2020.09.07

자바에서는 다양한 방법으로 객체를 생성할 수 있도록 생성자 오버로딩(Overloading)을 제공한다.

생성자 오버로딩이란 매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 말한다.

즉, 매개 변수의 형식을 가지고 있는 메소드를 여러 개로 정의할 수 있는 방법이다.

 

만약 기본 생성자가 없는 상태라면 생성자 오버로딩이 불가능하고 생성자 오버로딩 시 매개 변수, 타입, 선언된 순서,

가 기존 생성자와 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이라고 볼 수 없다.

//오버로딩이 아님!!
Car(String model, String color){...}
Car(String color, String model){...}

 

 

class Car {
	String company = "현대";
	String model;
	String color;
	int maxSpeed;
	
	//생성자 1
	public Car() {
		
	}
	//생성자 2
	public Car(String model) {
		this(model, "은색", 250);
	}
	//생성자 3
	public Car(String model, String color) {
		this(model, color, 250);
	}
	
	//생성자 4
	Car(String model, String color, int maxSpeed){
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
	
	
}

 생성자가 오버로딩이 되어 있을 경우 , new 연산자로 생성자를 호출할 때 제공되는 매개 변수의 값과 타입과

수에 의해 호출될 생성자가 결정된다. 이렇게 변수의 타입과 개수 그리고 순서를 달리하여 생성자 오버로딩을

한 예 이다.

 

다음은 오버로딩된 생성자를 다른 클래스에서 객체를 생성하는 방법이다.

 

public class CarExample {

	public static void main(String[] args) {
		
		//생성자 1선택
		Car car1 = new Car();
		System.out.println("car1.company : " + car1.company);
		System.out.println();
		
		//생성자 2선택
		Car car2 = new Car("그랜저");
		System.out.println("car2.company : " + car2.company);
		System.out.println("car2.model : " + car2.model);
		System.out.println();

		//생성자 3선택
		Car car3 = new Car("아반떼", "White");
		System.out.println("car3.company : " + car3.company);
		System.out.println("car3.company : " + car3.model);
		System.out.println("car3.company : " + car3.color);
		System.out.println();

		//생성자 4선택
		Car car4 = new Car("산타페", "Black", 250);
		System.out.println("car4.company : " + car4.company);
		System.out.println("car4.company : " + car4.model);
		System.out.println("car4.company : " + car4.color);
		System.out.println("car4.company : " + car4.maxSpeed);
		System.out.println();

		
	}

}

'JAVA' 카테고리의 다른 글

[JAVA] 추상클래스  (0) 2020.09.14
[JAVA] this  (0) 2020.09.14
[JAVA] 클래스와 객체 -1  (0) 2020.09.08
[JAVA] 메소드-3  (0) 2020.09.07
[JAVA] 메소드-2  (0) 2020.09.07

*클래스(class)

- 객체를 정의해 놓은 것 -> 객체를 생성하기 위한 템플릿(Template)

- 객체의 구성 및 생성에 쓰임.

 

 

 

*객체(object) 

- 실생활에 존재하는 것들을 모두 표현함.

- 예를들어 실제로 존재하는 자동차, 자전거, 책, 사람 등 모두 객체가 될 수 있다.

- 속성(특성)과 기능으로 구성.

 

*객체지향이란

-사물이나 개념을 "속성과 기능을 가진 객체"로 모델링하고, 이들간의 관계를 정의함.

(Self-contained Component 스스로 존재하는 자)

 

*자바에서의 객체지향 3단계

1)객체 모델링 : 프로그래밍 하고자 하는 객체의 속성과 필요한 기능을 정리한다.

2)클래스 정의 : 객체를 실제로 사용하기 위해서, 클래스라는 형태로 객체를 표현한다.

3)객체 생성과 사용 : 정의돈 클래스를 이용해서, 메모리상에 객체(Object)를 생성하고, 사용한다.

 

 

표현)

<클래스>

[접근제어자] class 클래스명 {
	변수, 생성자, 메소드를 정의함

}

<객체>

[참조형] 참조변수명 = new [클래스명](); 

	class A{

}
	A a = new A();
    
  

 

여기서 new[클래스명](); 으로도 객체 생성이 가능하지만 데이터를 담는 그릇(타입)이 있어야 한다.
즉, A는 실제 데이터를 담는게 아니라 주소를 담고있다.

 

 

본 클래스에서 객체를 생성

public class ClassEx{

	public static void main(String[] args){
    	ClassEx obj = new ClassEx(); 
    }
 }

                     

 

 

'JAVA' 카테고리의 다른 글

[JAVA] this  (0) 2020.09.14
[JAVA] 생성자 오버로딩  (0) 2020.09.11
[JAVA] 메소드-3  (0) 2020.09.07
[JAVA] 메소드-2  (0) 2020.09.07
[JAVA] 메소드  (0) 2020.09.07
//dan1, dan2를 args(인자)로 만들어 구구단 구현(method)

public class MethodEx3{
	public static void methodA(int dan1, int dan2){  //반환값이 없는 methodA 생성 및 인자 int a, int b 정의
    	for(int j = dan1; j<=dan2; j++){
        	for(int i=1; i<=9; i++){
            	System.out.println(j + " * " + i + " = " + (j * i));
             }
         System.out.println();
         }
     }

public static void main(String[] args){
	methodA(2, 7);                                  //인자 2, 7 전달 및 호출 
    }
  }

int dan1, int dan2에 각각 2와 7을 전달하여 2단부터 7단까지 구구단을 출력.

 

 

 

 

 

 

 

 

 

 

 

문제) 주어진 배열값 중 홀수단(구구단 홀수)을 출력하시오.

public class MethodEx4{
	public static void main(String[] args){
    	int[] array = {2, 5, 7, 3};
        method(array);						  //메소드 호출
        
    }
    
    public static void method(int[] array){
    	for(int i=0; i<array.length; i++){     //배열 array의 길이만큼 반복
        	for(int j=1; j<10; j++){
            	if(array[i] % 2 != 0){         //홀수만 출력하기 위해 2로 나눴을 때 0이 아닌 것 선별
                System.out.print(array[i] + " * " + j + " = " + (array[i]*j));
                }
                
             }System.out.println();
         }
         }
 }

배열 {2, 5, 7, 3}에서 홀수인 5, 7, 3인 홀수단이 정상적으로 출력되었다.

 

'JAVA' 카테고리의 다른 글

[JAVA] 생성자 오버로딩  (0) 2020.09.11
[JAVA] 클래스와 객체 -1  (0) 2020.09.08
[JAVA] 메소드-2  (0) 2020.09.07
[JAVA] 메소드  (0) 2020.09.07
[JAVA] 데이터 타입 (다차원 배열)  (0) 2020.08.31
//메소드 기본 예제

public class MethodEx{

	public static int sum(int a, int b){  //메서드 sum 생성 및 매개변수(int a, int b)정의
    	return a+b;                       //return 값을 a+b로 구현
	}

    
    public static void main(String[] args){
    	int result = sum(10, 10);		  //int result란 변수에 메소드sum과 매개변수 각각 10씩 정의
        System.out.println("메소드 sum 호출 : "+result);  //메소드 sum출력
    }
}

sum이라는 메소드를 만들어서 매개변수(인자)를 각각 int a, int b로 주고

return값을 a+b로 구현하였고  main에서  메서드 sum을 호출하는데 인자를 각각 10,10 씩 정의하여 result가 20이 출력되는 것을 확인할 수 있다.

 

 

 

//메소드 기본 예제2

public class MethodEx2 {

	public static void methodA(){   //반환값(return)이 있는 메소드methodA 생성
    	int sum = 0;
        for(int i=1; i<=10; i++){   //1부터 10까지의 합
        	sum += i;               //결과를 sum에 저장
        }
        System.out.println("결과1 : " + sum);
     }
     
     public static void methodB(){	//반환값(return)이 없는 메소드 methodB 생성
     	int sum = 0;
        for(int i=1; i<=10; i++){   //똑같이 1부터 10까지의 합을 sum에 저장
        	sum += i;
        }
        return sum;					//sum값을 반환
     }
     
     public static void main(String[] args){
     	methodA();					//methodA를 호출
        int sum = methodB();		//methodB를 호출
        System.ou.println("결과2 : " + sum);
     }
 }
        

리턴값이 있냐 없냐에 따라 메소드를 호출하는 방법이 조금 다르다.

먼저 methodA( ) 메소드는 리턴값이 없기 때문에 변수에 저장할 내용이 없다. 그래서 단순히 메소드만 호출하면 되고 methodB( )는 1부터 10까지의 합인 55를 리턴하므로 이것을 저장할 변수가 필요하다. 리턴값을 받기 위해 메소드의 리턴 타입인 int 타입으로 sum을 선언하여 methodB( )를 호출한다.

'JAVA' 카테고리의 다른 글

[JAVA] 클래스와 객체 -1  (0) 2020.09.08
[JAVA] 메소드-3  (0) 2020.09.07
[JAVA] 메소드  (0) 2020.09.07
[JAVA] 데이터 타입 (다차원 배열)  (0) 2020.08.31
[JAVA] 데이터 타입 (배열2)  (0) 2020.08.31

메소드(method)는 객체의 동작에 해당하는 중괄호 블록 { }을 말한다.  이 중괄호 블록이 가지는 이름이 

바로 메소드 이름이다.

 

메소드를 호출하게 되면 중괄호 블록에 있는 코드들이 실행된다. 이 메소드는 외부로부터 매개값을 받을 수도 있고, 

실행 후 어떤 값을 리턴할 수도 있다. 

 

//메소드 선언

[접근 제어자][수정자][반환형] 메소드 명 (매개변수) {
		실행 구문(구현);
 }
 

 

*접근 제어자(Modifies)
: private, default(friendly), protected, public 

*수정자
: static, final, abstract, native....

*반환형(return type)
: 자바 데이터 자료형(기본형, 참조형)전부 사용할 수 있음.
: void - 반환형이 없는 메소드 정의시 사용.

*메소드명 : 식별자로 임의의 이름 정의.
*인자(Arguments) : 매개 변수라고하며 메소드 호출시 데이터를 전달하기 위한 용도로 사용.

 

//메소드 표현

표현1)

public void int intA() {
	구현;
    return n;  //n -> int 기본 자료형에 맞는 데이터 변환
 }
 
 
 표현2)
 
 public void int intB(int a, ....){
 	구현;
    //void는 retrun구문을 사용하지 않음
 }

 

메소드를 사용하면 기존의 복잡한 코드를 분리함으로써 메소드의 기능 그리고 코드의 복잡성을 줄일 수 있고

필요할 때 호출하여 사용할 수 있는 장점이 있다.

'JAVA' 카테고리의 다른 글

[JAVA] 메소드-3  (0) 2020.09.07
[JAVA] 메소드-2  (0) 2020.09.07
[JAVA] 데이터 타입 (다차원 배열)  (0) 2020.08.31
[JAVA] 데이터 타입 (배열2)  (0) 2020.08.31
[JAVA] 데이터 타입 (배열)  (0) 2020.08.31

+ Recent posts