728x90
반응형

생성자에서 다른생성자 호출하기 - this()

▶ 같은 클래스의 멤버들 같에 서로 호출할 수 있는 것처럼 생성자끼리도 서로 호출이 가능하다.

단, 다음의 두 조건을 만족시켜야 가능하다.

- 생성자의 이름으로 클래스 이름 대신 'this'를 사용한다.

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





<생성자 호출 this>






참조변수 this

  - 인스턴스 자신을 가리키는 참조변수

  - 현재 클래스의 객체를 가리키는 참조변수




<참조변수 this>






<생성자 this() 와 참조변수 this>

 






정적 메서드(static method)

 - 객체를 생성하지 않고 사용할 수 있는 메서드

 - 정적 메서드에서는 인스턴스 변수와 인스턴스 메서드에 접근할 수 없다. 인스턴스 변수와 메서드는 객체를 생성해야만 접근가능하기 때문이다.

 - 정적 메서드에서는 정적 변수와 지역 변수만 사용할 수 있다.

 - 정적 메서드는 this키워드를 사용할 수 없다. this가 참조할 객체가 없기 때문이다.


예)

 - main()메서드 : public static void main()

 - Math 클래스에 들어있는 각종 수학 메서드들 : Math.sqrt(9.0)



<정적 메서드>​

728x90
반응형
728x90
반응형

생성자(constructor)

 - 객체가 생성될 때에 변수에게 초기값을 제공하고 필요한 초기화 절차를 실행하는 메서드

 - 인스턴스 변수를 초기화하는것이 목적이다. 하나의 변수를 동시에 여러개의 값으로 초기화할 수 있다.

 - 일반 객체르,ㄹ 생성하였을 경우에는 아무것도 없는 맨얼굴의 객체를 생성하는 것이고, 생성자를 사용하면 꾸며진 객체를 생성할 수 있고 또한 매개변수에 따라서 서로 다른 모양의 객체를 생성할 수 있다.


생성자의 특징

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

 - 인스턴스 변수의 초기화 또는 인스턴스 생성시 실행할 작업에 사용

 - 몇가지 조건을 제외하고는 메서드와 같다.

 - 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

 - 생성자 역시 메서드처럼 클래스 안에 선언되고 구조도 메서드와 유사하지만, 리턴값이 없다는 점이 다르다. 리턴값이 없어도 void키워드는 사용하지 않는다.


생성자의 조건

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

 - 생성자는 리턴값이 없다. 하지만 void를 쓰지 않는다.


      클래스이름 (타입 변수명, 타입 변수명, ...) {

                인스턴스 생성시 수행될 코드

                주로 인스턴스 변수의 초기화 코드를 적는다.

      }

            ↓↓↓

     class Card {

             Card() {                                      //매개변수가 없는 생성자

                   인스턴스 초기화 작업

              }

             Card(String kind, int number) {     //매개변수가 있는 생성자

                   인스턴스 초기화 작업

             }

     }



<생성자>




디폴트 생성자(default constructor)

 - 매개변수가 없는 생성자

 - 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.

    ( 생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.)

 

형식 : 클래스이름() { }

 //컬파일러에 의해 추가된 Card클래스의 기본생성자. 내용이 없다.

 Card() { }

※ 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.


<디폴트 생성자 1>




 <디폴트 생성자 2>

생성자가 하나라도 정의되어 있으면 디폴트 생성자는 만들어지지 않는다.




<디폴트 생성자 3>







매개변수가 있는 생성자



※ 인스턴스를 생성한 후 인스턴스 변수의 값을 변경하는 것보다, 매개변수를 있는 생성자를 사용하는 것이 코드를 보다 간결하고 직관적으로 만든다.


<매개변수 있는 생성자>

728x90
반응형
728x90
반응형

설정자와 접근자

설정자(mutator)

 - 필드의 값을 설정하는 메서드

 - setXXX () 형식


접근자(accessor)

 - 필드의 값을 반환하는 메서드

 - getXXX () 형식


※설정자와 접근자 메소드를 통하여 멤버변수에 접근한다.


<설정자와 접근자>




설정자와 접근자를 사용하는 이유

- 클래스에서 선언된 private 변수는 다른 클래스에서 접근할 수 없기 때문에, 접근하기 위한 메서드(설정자와 접근자)를 public으로 선언하여 사용하는 것 이다.

- 설정자에서 매개변수를 통하여 잘못된 값이 넘어오는 경우, 사전에 차단할 수 있다.

- 필요할 때마다 필드값을 계산하여 반환할 수 있다.

     public void setSpeed(int s) {

               if ( s < 0 )        <------ 속도가 음수이면 0으로 만든다.

                     speed = 0;

               else

                     speed = s;

     } 



문자열 객체

 자바에서 문자열은 객체이다.

 클래스에서 문자열 객체를 생성하는 방법

  -> String s = new String("Hello World!");

 문자열 객체의 메서드 호출하는 방법

  -> String s = new String("Hello World!");

       int size = s.length();  //size는 12가된다.

String 클래스의 메서드

 char :: charAt(int index)  -> 지정된 인덱스에 있는 문자를 반환한다.

 int :: compareTo(String anotherString)  -> 사전적 순서로 문자열을 비교한다. 앞에 있으면 -1, 같으면 0, 뒤에있으면 1이 반환된다.

 String :: concat(String str)  -> 주어진 문자열을 현재의 문자열 뒤에붙인다.

 boolean :: equals(Object anObject)  -> 주어진 객체와 현재의 문자열을 비교한다.

 boolean :: equalsIgnoreCase(String anotherString)  -> 대소문자를 무시하고 비교한다.

 boolean :: inEmpty()  -> length()가 0이면 true를 반환한다.

 int :: length()  -> 현재 문자열의 길이를 반환한다.

 String :: replace(char oldChar, char newChar)  -> 주어진 문자열에서 oldChar를 newChar로 변경한, 새로운 문자열을 생성하여 반환한다.

 String :: substring(int beginIndex, int endIndex)  -> 현재 문자열의 일부를 반환한다.

 String :: toLowerCase()  -> 문자열의 문자들을 모두 소문자로 변경한다.

 String :: toUpperCase()  -> 문자열의 문자들을 모두 대문자로 변경한다.


728x90
반응형
728x90
반응형

메서드(method)

 - 작업을 수행하기 위한 명령문의 집합(※ C와 C++에서 함수와 같은 의미)

 - 어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.

    (입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.)


메서드의 장점과 작성방법

 - 반복적인 코드를 줄이고 코드의 관리가 용이하다.

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

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

 - 관련된 여러 문장을 메서드로 작성한다.





인수와 매개변수

인수 :: 메서드 호출시 전달하는 값

매개변수 :: 메서드에서 값을 받을 때 사용하는 변수


메서드의 값 반환

 메서드는 작업의 결과값을 반환할 수 있다.

 반환값은 하나만 가능하다.




<메서드 호출 순서>



메서드의 정의

 메서드를 정의하는 방법 : 클래스 영역에서만 정의할 수 있다.


리턴타입 메서드이름 ( 타입 변수명, 타입 변수명, ...)  ------- 선언부

 {                                                                       ------- 구현부

           //메서드 호출시 수행될 코드

 }

          ↓↓↓↓

 int add (int a, int b)                  ---------선언부

 {                                           ---------구현부

      int result = a+b;

      return result;         

      //호출한 메서드로 결과를 반환한다.

 }          


void power ()      -------반환값이 없는경우 리턴타입 대신 void를 사용한다. 

{

        power = !power;

}



​메서드의 호출

 참소변수.메서드 이름();            //메서드에 선언된 매개변수가 없는 경우

 참조변수.메서드 이름(값1,값2);  //메서드에 선언된 매개변수가 있는 경우



메서드의 종료

 ▶메서드가 정상적으로 종료되는 경우

     -메서드의 블럭 { }의 끝에 도달했을 때

     -메서드의 블럭 { }을 수행 도중 return문을 만났을 때

▶return문

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

       1.반환값이 없는 경우 - return문만 써주면 된다.

                return ;

       2.반환값이 있는 경우 - return문 뒤에 반환값을 지정해 주어야 한다.

                return 반환값;


return문

▶반환값이 있는 메서드는 모든 경우에 return문이 있어야 한다.

▶return문의 개수는 최소화 하는것이 좋다.




<메서드의 호출>




중복 메서드

 메서드 호출시 매개변수를 보고 일치하는 메서드가 호출된다.

만약 square(3.14)와 같이 호출되면 컴파일러는 매개변수의 개수, 타입, 순서 등을 판단하여 두번째 메서드를 호출한다.



<중복메서드>

728x90
반응형
728x90
반응형

변수의 종류

 선언 위치에 따른 변수의 종류 : 변수의 선언 위치가 변수의 종류와 범위를 결정한다.


 ▶인스턴스 변수

   - 각 객체의개별적인 저장 공간, 객체마다 다른 값 저장 가능

   - 객체(인스턴스) 생성 후, '참조변수.인스턴스변수명'으로 접근

   - 객체를 생성할 때 생성되고, 참조변수가 없을 때 가비지컬렉터에 의해 자동으로 제거된다.


▶클래스 변수

   - 같은 클래스의 모든 인스턴스들이 공유하는 변수

   - 인스턴스 생성없이 '클래스이름.클래스변수명'으로 접근

   - 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸


▶지역 변수

   - 메서드(함수) 내에 선언되며, 메서드의 종료와 함께 소멸

   - 조건문, 반복문의 블럭 { } 내에 선언된 지역변수는 블럭을 벗어나면 소멸

 


클래스 변수와 인스턴스 변수

 인스턴스 변수 :: 객체가 생성될 때마다 생성되므로 객체마다 각각 다른 값을 가진다.

 클래스 변수 :: 모든 객체가 하나의 저장공간을 공유하므로 항상 공통된 값을 가진다.


인스턴스 변수(필드)의 선언

 public  int  speed;

public -> 접근지정자; private이나 public

int -> 필드의 타입

speed -> 필드의 이름


접근지정자(접근제어자) :: 어떤 클래스가 변수에 접근할 수 있는지를 표시한다.

public :: 모든 클래스로부터 접근이 가능하다.

private :: 클래스 내부에서만 접근이 가능하다.


<인스턴스 변수의 사용범위>

 인스턴스 변수는 선언 위치에 상관없이 클래스안의 어디서나 사용이 가능하다.




<클래스 변수와 인스턴스 변수>




지역 변수

 메서드(함수) 안에 선언하는 변수

public class Box {

  int width=0,length=0,height=0;  //인스턴스 변수(클래스에서 사용가능)

 

  public int getVol()

  {

      int vloume;    //지열 변수(getVol()안에서만 사용가능)

      volume=width*length*height;

      return volume;

   }


  volume=500;   //오류발생

}


지역 변수 사용시 주의점

 지역변수를 초기화하지 않고 사용하면 컴파일 오류 발생한다.

 오류 메세지: The local variable sum may not have been initialized

public class Bug {

   public int getSum()

   {

        int sum;

        for(int i=0; i<10; i++)

             sum=sum+i;  //오류발생

        return sum;  //오류발생

   }

}

728x90
반응형

+ Recent posts