728x90
반응형

제어자(modifier)

 - 클래스, 멤버변수, 메서드의 선언부에 주로 사용된다

 - 하나의 대상에 여러 개의 제어자를 조합하여 사용할 수 있으나, 접근제어자는 한번에 4개중 하나만 선택하여 사용할 수 있다. 즉, 하나의 대상에 대하여 public과 private를 동시에 사용할 수 없다.

 - 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.


접근제어자 :: public, protected, default, private

그         외 :: static, final, abstract, native, transient, synchronized, volatile, strictfp



static (클래스의, 공통적인 제어자)

 static이 사용될수 잇는곳 :: 멤버변수, 메서드, 초기화 블럭


멤버변수 -> 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다.

                  클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다.

                  클래스가 메모리에 로드될 때 생성된다.

메서드 -> 인스턴스를 생성하지 않고도 호출이 가능한 static메서드가 된다.

               static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다.




final (마지막의, 변경될 수 없는 제어자)

 final이 사용될 수 있는 곳 :: 클래스, 메서드, 멤버변수, 지역변수


클래스 -> 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.

메서드 -> 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다.

멤버변수 -> 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다.

지역변수 -> 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다.




접근 제어자 (access modifier)

 멤버 또는 클래스에 사용되어, 외부로부터의 접근을 제한한다.

 접근 제어(access control) :: 다른 클래스가 특정한 필드나 메서드에 접근하는 것을 제어하는 것


접근 제어자가 사용될 수 있는 곳 :: 클래스, 멤버변수 메서드, 생성자

 private -> 같은 클래스 내에서만 접근이 가능하다.

 default -> 같은 패키지 내에서만 접근이 가능하다.

 protected -> 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.

 public -> 접근 제한이 전혀 없다.




접근 제어의 종류

 클래스의 접근 제어

 - public : 다른 모든 클래스가 사용할 수 있는 공용 클래스

 - package(default) : 같은 패키지 안에 있는 클래스들만 사용할 수 있는 클래스


 멤버의 접근 제어

 


 

<접근 제어>



728x90
반응형
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
반응형

+ Recent posts