티스토리 뷰

Chapter 6. 클래스에 대하여

 

▶ 학습 목표

: 클래스가 무엇인지 이해하고 클래스변수 인스턴스변수의 차이에 대해 설명할 수 있다.

 

 

6-4. 메서드

: 파라미터값을 받아 처리하고 리턴값을 반환하거나 출력하는 함수

반환타입 메서드명(타입 변수명, 타입 변수명, ..)
{
	//메서드 내부 동작
	return 값;
}

메서드도 함수이기 때문에 클래스와 인스턴스로 구분한다.

 

반환타입에는 일반변수들과 참조변수 클래스도 올 수 있다.

 

 

 

- 클래스 멤버와 인스턴스 멤버 참조 및 호출

: 클래스 멤버 → 인스턴스 멤버  X

  인스턴스 멤버 → 클래스 멤버  O

  인스턴스 멤버 → 클래스 멤버  O

  클래스 멤버 → 인스턴스 멤버  O

 

Class test
{
    int a   //인스턴스 변수 이므로 생성 해주어야 사용가능
    static int b  
    //static변수이므로 이미 생성되어 있음 생성 따로 하지 않아도 사용가능

    void c()
    {
    }
    static void d()
    {
    }
} //a=new.test(); 명령어를 실행하면 클래스가 생성된다.
  //클래스가 생성되면서 그 안에 있는 함수 변수도 함께 생성된다.
  //그러므로 int a도 함께 생성되어 인스턴스 변수도 사용가능하게 된다.

 

인스턴스는 생성하지 않으면 존재하지 않는다.

실체가 없다는 것 꼭 기억하기.

클래스(static)은 이미 생성되어 있기 때문에 생성이 따로 필요 없다.

생성할 수는 있지만 굳이 하지 않아도 된다.

 

 

 

ex) static과 인스턴스 차이

package chapter6;
class Check
{
	//instanceVariable: iv
	//calssVariable : cv
	//instanceMethod : im
	//classMethod : cm
	
	
	static int cv = 5; //static변수, 전역변수
	int iv = 4; //인스턴스 변수
	
	static void cm() //static함수
	{
		
	}
	void im() //인스턴스 메서드
	{
		
	}
	
	static void cm_Imember()  //static 메서드
	{
		//클래스 메서드가 인스턴스멤버에 접근
		//System.out.println(iv); //에러발생
		//im(); //에러발생 im은 인스턴스메서드 클래스(static)에서 인스턴스 접근 안됨
	}
	
	void im_Cmember() 
	{
		System.out.println(cv); //클래스변수 참조 가능(인스턴스가 클래스 참조)
		cm();
		
		
	}
	static void cm_Cmember() 
	{
		System.out.println(cv);
		cm();
	}
	void im_Imember() 
	{
		System.out.println(iv);
		im();
	}
}



public class Method3 
{

	public static void main(String[] args) 
	{
		//Check.cm_Imember();//에러
        //cm_Imember()은 클래스함수인데 함수 안의 명령어를 살펴보면 인스턴스 멤버에게 접근한다.
        //그렇기 때문에 에러
		Check.cm_Cmember(); //성공
		
		Check myinstance = new Check();
		myinstance.im_Cmember(); //성공
		myinstance.im_Imember(); //성공

	}

}

 

5
5
4

 

 

 

6-5. 오버로딩

: 같은 함수를 여러개 만들어 실행한다.

파리미터 값을 다르게 받는다.(갯수 or 타입(타입의 경우 하나라도 다른 타입이면 가능))

 

 

package chapter6;

public class Overloading1 
{
	static int sum(int a, int b) {
		System.out.println("인자가 둘일 경우 호출됨");
		return a+b;
	}
	static int sum(int a, int b, int c) 
	{
		System.out.println("인자가 셋일 경우 호출됨");
		return a+b+c;
	}
	static double sum(double a, double b, double c) 
	{
		System.out.println("double 타입일 경우 호출됨");
		return a+b+c; //자기를 불러준 구문으로 이동
	}

	public static void main(String[] args) 
	{
		System.out.println(sum(3,2));  //정수 값 두개를 파라미터로 하는 함수로 호츌
		System.out.println(sum(2,3,4));  //정수 값 세개를 파라미터로 하는 함수로 호출
		System.out.println(sum(2.5,3.5,4.5));  //실숫값 세개를 파라미터로 하는 함수 호출

	}

}

 

 

 

6-6. 생성자

: 인스턴스를 생성할 때(new) 호출되고 그 인스턴스 변수들을(클래스의 자식) 초기화하는 일종의 메서드

생성자의 이름은 클래스명과 같고 생성자에는 리턴 값이 없다(void (but, 생략함))

반환타입도 붙이지 않는다.

 

자기가 속한 클래스의 변수를 어떻게 초기화할 것인가 명령하는 것.

(이때의 변수는 인스턴스 변수를 뜻함. 클래스 X → new로 생성하고 생성자 호출함)

(********함수는 두가지 기능이 있다 호출과 만드는 것***********)

(호출하는 기능을 할 때는 함수() 이므로 중괄호가 없고 만드는 기능을 할 때는 함수(){} 이므로 중괄호가 존재한다)

 

 

package chapter6;

class Cellphone
{
	String model = "Galaxy 8"; //
	String color;
	int capacity;
	
	Cellphone(String color, int capacity) //클래스명과 (같은 이름의 함수)생성자명 같음
	{
		this.color=color;
		this.capacity=capacity;
		
	}
	Cellphone(String model,String color, int capacity) //string, string, int 값을 갖는 생성자
	{
		this.model=model;
		this.color=color;
		this.capacity=capacity;
		
	}
}

public class Constructor1 
{
	public static void main(String[] args) 
	{
		
		
		//Cellphone myphone1=new Cellphone(); 
		//인자값(파라미터가 없는)함수는 없음 
		
		Cellphone myphone=new Cellphone("Silver",64);
		//파라미터를 두개 받는 함수로 이동
		
		System.out.println(myphone.model);
		System.out.println(myphone.color);
		System.out.println(myphone.capacity);
		
		Cellphone myphone2=new Cellphone("iPhone15","Silver",64);
		//파라미터를 세개 받는 함수로 이동
		
		System.out.println(myphone2.model);
		System.out.println(myphone2.color);
		System.out.println(myphone2.capacity);
	}

}

 

 

 

- this

: 이름이 같을 때 사용한다.

전역변수를 가르킨다.

 

this.변수   :    전역변수
this()      :    같은 이름의 다른 함수

 

 

 

ex) this 활용

package chapter6;
class obj
{ 
   int first;
   String second;
   obj()   //인자 없는 obj
   {
	   
   }
   obj(int first)  //정수 한개를 인자로 받는 obj
   {
      //다른 생성자를 호출함
      this(first,"민수");
   }
   obj(int a,String b)   //정수와 문자열을 인자로 받는 obj
   {
      first = a;
      second = b;
      
   }
   obj setFirst(int a) 
   {

      return this;  //return this를 한다. this는 obj객체
   } 
   obj setSecond(String b) 
   {
      second = b; //second에 입력받은 b 값인 "광수"가 입력 대입됨 but, 따로 출력하거나 리턴하지 않음
      return this; //obj 주소 반환
   }
}
public class method 
{

   public static void main(String[] args) 
   {
      
      int v1 = 9;
      String v2 = "광수";
      obj a = new obj();
      obj b = new obj(v1); 
      //this(first,"민수");를 호출한다. obj의 인자값 두개 받는 함수 호출후 실행
      obj c = new obj(v1,v2);
      
      System.out.println(a.first);  //null
      System.out.println(a.second);  //null
      
      System.out.println(b.first);  //9
      System.out.println(b.second);  //민수
      
      System.out.println(c.first);  //9
      System.out.println(c.second);  //광수
      
      
   }

}

 

 

 

ex) 메소드 체인 

 

package chapter6;
class obj
{ 
   int first;
   String second;
   obj()   //인자 없는 obj
   {
	   
   }
   obj(int first)  //정수 한개를 인자로 받는 obj
   {
      //다른 생성자를 호출함
      this(first,"민수");
   }
   obj(int a,String b)   //정수와 문자열을 인자로 받는 obj
   {
      first = a;
      second = b;
   }
   obj setFirst(int a) 
   {

      return this;  //return this를 한다. this는 obj객체
   } 
   obj setSecond(String b) 
   {
      second = b; //second에 입력받은 b 값인 "광수"가 입력 대입됨 but, 따로 출력하거나 리턴하지 않음
      return this; //obj 주소 반환
   }
}
public class method 
{

   public static void main(String[] args) 
   {
      
      
      obj ob = new obj(9);
      //obj obb = new obj(10);//
      ob.setFirst(10).setSecond("광수"); 
      
      /*1.setFirst(int a)를 호출
      2.return this로 obj를 반환 받음
      3.obj의 setSecond(String b)를 호출
      4.return this로 obj를 반환 받음
      5.ob.ob.ob가 된다. 계속 이어서 가능함
      **ob와 obb는 다른 주소를 가짐 같은거 아님.
      */
   }

}

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday