메소드


1. 객체 지향 프로그램에서 행동에 해당하는 부분을 정의하는 것.

2. 정의하는 방법


접근지정자 기타 제어자 반환자료형 메소드명(매개 변수){

//실행문;

//return 구문;

}


3. 클래스 내부에는 멤버변수, 메소드만 정의 가능.


public class 클래스명 {


//멤버변수 정의


//메소드 정의


//클래스 차원에서는 실행문이 올 수 없다. -> 메소드 내부에만 존재가능.


}


4. 메소드에는 특별히 목적을 가진 메소드가 있다.

-> main: 프로그램의 진입점 역할

-> getter, setter : 멤버변수에 대해서 간접적인 데이터 입출력 담당.

-> 생성자 : 객체 생성에만 참여하는 전용 메소드. 멤버변수 초기화 역할 담당. 생성자는 표기하지 않아도 자동 생성 및 호출.


5. 메소드 인수 전달 방법

- Call by Value (값에 의한 전달) : 기본 자료형 간의 값 전달시 발생. 값이 복사되면서 전달

- Call by Reference (참조에 의한 전달) : 참조형 간의 값 전달시 발생. 값의 대한 참조 주소만 전달.

                                                         배열이나 String같이 참조자료형은 결국 값을 공유하게 된다는게 포인트


//Class25.java

//Class26.java







문제)return구문 없이 결과값 돌려받는 메소드 구현. 최대값, 최소값 얻기

실행 예)

입력할 숫자의 갯수 지정(2~10)?3

숫자1?XX

숫자2?YY

숫자3?ZZ

입력 받은 숫자 : XX, YY, ZZ

가장 큰 숫자 :  ZZ


//가장 큰 숫자를 리턴하는 메소드 구현

public void max(int[] arr) {

//가장 큰 값 얻는 과정 추가

}

//Calc.java

//Class27.java




문제) 사용자가 직접 sort() 메소드 구현. Test.sort(배열); 형태로 구성할 것.

//Test.java

//Class28.java








되부름(Recursion)

1. 메소드는 다른 메소드를 호출하여 이용할 수 있을 뿐 아니라 자기 자신의 메소드를 다시 호출하여 사용할 수 있다.

-> 주의. 무한 실행이 될 수도 있음.


public void method1() {

if(조건) {

return; //반환자료형이 void에서 return을 사용하면 메소드 종료를 의미.

}

method1(); //되부름

}


//Class29.java








문제) 팩토리얼(n!) 계산해서 출력. recursion 사용할 것. 반복문 이용 불가.

1 * 2 * 3 * 4 * 5 * 6 * ...  * n -> xxxx


10! -> 3628800


실행 예)

팩토리얼 값(2~10)?

1! -> 1

2! -> 2

3! -> 6

4! -> 24

...

10! -> 3628800

//Class30.java







문제) 밑수, 지수를 받아서 제곱승 출력, recursion 이용.

실행 예)

입력(밑수 지수)?2 10

2^10 -> 1024

//Class31.java







생성자


1. 객체 생성을 담당하는 전용 메소드. 자동 생성되기 때문에 표기하지 않고 생략하는 경우가 많음.

2. 멤버 변수 초기화 역할 담당.

3. 생성자 정의

public class 클래스명 {


//생성자

//반환자료형이 없다.

//메소드명은 클래스명으로만 가능.

//기본 생성자는 컴파일러에 의해 자동 생성되므로 주로 생략함.

public 클래스명() {

}


public static void main(String[] args) {

//생성자 호출 부분

클래스명 객체변수 = new 클래스명();

}

}


4. 멤버 변수 초기화 역할을 하는 경우는 반드시 생성자를 표기해야 한다.

public class 클래스명 {


//멤버 변수

자료형 변수명;


//생성자

//반환자료형이 없다.

//메소드명은 클래스명으로만 가능.

//기본 생성자는 컴파일러에 의해 자동 생성되므로 주로 생략함.

//매개변수가 존재하는 생성자 표기시 반드시 기본 생성자를 같이 표기해야 한다.


//동일한 명칭을 가진 메소드가 두개 이상인 경우를 메소드 오버로딩 상태라고 함.

//생성자가 두개인 경우는 생성자 오버로딩(constructor overloading)

public 클래스명() {

}


public 클래스명(매개변수 리스트) {

변수명 = 값;

}


public static void main(String[] args) {

//생성자 호출 부분

클래스명 객체변수 = new 클래스명();

}

}


//Class32.java


//Class33.java







this 생성자


1. this 키워드는 생성된 객체를 지정하는 자기 자신을 의미하는 용어.

2. 객체가 생성될 예정인 경우 미리 변수 선언을 할 수 없으므로, this 키워드로 표현. 객체가 생성되면 그때 비로소 참조주소가 저장된다.


예를 들어 홍길동이라는 객체가 있다면

홍길동 -> 3인칭

나, 너 -> 1, 2인칭

홍길동 입장에서는 '나'라는 표현이 바로 홍길동 자신을 의미.'나'에 해당하는 표현이 바로 this 키워드의 역할.


public class 클래스명 {


private 자료형 변수;


public 클래스명() {

//this 생성자

this(값); // this 키워드 생략불가

}

public 클래스명(자료형 변수) {

this.멤버변수 = 변수; // this 키워드 생략불가

}

public void method1() {

this.method2(); //this 키워드 생략가능

}

public void method2() {

}

}



//Class34







문제) n부터 m까지의 합을 계산해서 출력. 생성자 이용.

실행 예)

숫자1(n)?1

숫자2(m)?100


1부터 100까지의 합 : 5050

//Calc2.java

//Class35.java








멤버변수 초기화 과정


1. 자동 초기화 > 초기화 수식 > 초기화 블럭 > 생성자

2. 자동 초기화, 초기화 수식, 초기화 블럭을 이용하면 외부에서 전달 받은 데이터를 가지고 초기화 시키지는 못함.

3. 동일한 멤버변수에 대해서  자동 초기화, 초기화 수식, 초기화 블럭, 생성자에 의한 초기화 과정을 모두 거치게 되면

    최종적으로 생성자에 의한 초기값만 남게됨.

4. 초기화 과정은 객체가 생성되는 과정에서 자동 실행된다.

public class 클래스명 {

private int a; //자동 초기화

private int b = 10; //초기화 수식

private int c = 10; //초기화 수식

{ //초기화 블럭 (인스턴스 멤버용) -> 제어문 등 사용이 가능. 

this.b = 20;

this.c = 20;

}


public 클래스명() { //생성자에 의한 초기화

this.c = 30;

}


public int getA() {

return a;

}

public int getB() {

return b;

}

public int getC() {

return c;

}

}


//Class36.java







setter와 생성자에 의한 멤버변수 초기화 과정 비교


//Class37.java







문제) 여러명의 국어, 영어, 수학 점수를 입력 받아서 

총점, 평균, 판정, 등수, 과목별 판정, 과목별 평균 결과 출력. 배열, 클래스 이용.


판정 기준은

합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상

과락 -> 과목중에 40점 미만이 있고, 평균은 60점 이상

불합격 -> 평균이 60점 미만


평균이 60점 이상 -> 합격

평균이 60점 미만 -> 불합격


합격 또는 과락 구분은 -> 국어, 영어, 수학 점수가 모두 40점 이상인 확인.


과목별 판정 기준은

90점 이상은 A

80점 이상은 B

70점 이상은 C

60점 이상은 D

60점 미만은 F



실행 예)

인원수 입력(1~10)?2

성적 입력(이름 국어 영어 수학)?hong 100 100 100

성적 입력(이름 국어 영어 수학)?kim 80 90 80


-----------------------------------------

이름     국어    영어    수학   총점  평균  판정  등수

-----------------------------------------

hong     100(A)  100(A)  100(A)  300  100.0 합격  1

kim       80(B)   90(A)   80(B)  ..    ..   합격  2

과목평균 xxx.x   xxx.x   xxx.x  

-----------------------------------------



//Class38.. 

//기존 코드와 완전 동일하며, main 메소드 내 코등에 아래의 내용이 추가됨


WRITTEN BY
빨강꼬마

,

변수



1. 변수는 기억공간에 대한 별칭. 자료형 지정 필수.

-> 별수는 데이터를 저장하기 위한 공간이므로 사전에 미리 준비되어 있어야 한다.


2. 변수명은 식별자 작성 규칙에 맞춰서 작성.

자료형 변수 = 데이터;

자료형 변수 = 구문;


3. 지역 변수와 멤버 변수로 구분. 자동 초기화 지원 여부가 다르다.

지역 변수는 메소드 내부에 선언된 변수.

멤버 변수는 클래스 차원에 선언된 변수.



//자료형의 초기값 예제

//클래스

public class Test10 {

    

    int a; //멤버변수(클래스 안에서 선언하며, 자동초기화 지원)

    int kor, eng, mat; // int 초기값은 0

    double d;  // double 초기값은 0.000000

    char c;    // char 초기값은 '' 즉, 아무것도 없는 빈값

    boolean l; // boolean 초기값은 false

    String str; // 스트링 초기값은 null (참조형 변수 초기값은 null)

    

    //메소드(클래스 선언 후 선언하는 하위개념)

    public void test() {

        int b = 0; //지역변수(메소드 안에서 선언하며, 사용자가 직접 초기화해야함)

        int tot = 0;

        

        System.out.printf("a=%d %n", a);

        System.out.printf("kor=%d %n", kor);

        System.out.printf("b=%d %n", b);

        System.out.printf("tot=%d %n", tot);

        System.out.printf("double=%f %n", d);

        System.out.printf("char=%c %n", c);

        System.out.printf("boolean=%b %n", l);

        System.out.printf("String=%s %n", str);

    }

      

  //main 메소드 -> 프로그램의 진입점

        public static void main(String[] args) {


        Test10 obj = new Test10();

        obj.test(); // 사용자가 지정한 메소드에 실행 명령 호출 부분

}

}




//결과

a=0 

kor=0 

b=0 

tot=0 

double=0.000000 

char=

boolean=false 

String=null 





연산자

◆ 연산자의 종류 ◆

 산술 연산자

 + - * / %

 부호 연산자

 + -

 대입 연산자 (주로 많이 쓰이는 연산자)

 = 복합대입연산자 (+= -= *= /= %=)

 관계 연산자 (주로 많이 쓰이는 연산자)

 > >= < <= instanceof

 등가 연산자

 == != 

 증감 연산자

 ++ --

 논리 연산자

 && || !

 조건 연산자

 ? :

 비트 연산자 (잘 안쓰임)

 & | ^ ~ << >> >>>




1. 산술 연산자 + * * / %


* 곱하기 연산자

/ 나누기 연산자 (몫 연산 가능)

% 나머지 연산자


"예를 들어, 990원에서 500원의 갯수는?" 을 구하려면,

몫 연산을 수행해야 되는데 이때는 나누기 연산에서 정수 나누기 정수 연산을 수행하면 몫으로 정수가 나오는 것을 이용하여 몫을 구할 수 있음.
나누기 연산에서 정수 나누기 실수는 실수임. 즉,

990 / 500 -> 1 (몫)

990 / 500.0 -> 1.98 (나누기)


500원을 뺀 나머지 금액은 아래와 같이 구할 수 있다.

990 % 500 -> 490 (나머지)


정수 값이 저장된 변수 / 정수 값이 저장된 변수 -> 정수 결과 (몫)

정수 값이 저장된 변수 / (double)정수 값이 저장된 변수 -> 실수 결과 (나누기) //(double)은 캐스트 연산자라고 부름




문제) 거스름돈을 환폐단위로 구분해서 출력.
실행예)
금액(10~1000)? 990
총액 : 990원
오백원 1개, 백원 4개, 오십원 1개, 십원 4개





3. 증감 연산자 ++ --


데이터++ -> 데이터는 상수이므로 연산자 사용 불가


변수++ -> 변수는 현재 저장된 값에 대해서 +1 연산을 수행한 후 기존의 값을 덮어쓰기함

변수1++ -> 변수 = 변수1 + 1 과 같은 연산. 변수값을 먼저 사용하고, 더하기 연산은 나중에 함.

++변수1 -> 변수1 = 변수 + 1 과 같은 연산. 더하기 연산을 먼저 수행하고, 변수값을 나중에 사용함.



증감연산자 예

// 클래스

public class Test12 {

    

    //main 메소드. 프로그램 시작점.

    public static void main (String [] args){

        

        //지역 변수. 사용자 직접 초기화필수

        int a = 0;

        

//증감 연산자는 변수의 값을 1씩 증가시킨다.

        System.out.printf("%d %n", a++);

        System.out.printf("%d %n", a);

        System.out.printf("%d %n", ++a);

        System.out.printf("%d %n", (++a + ++a));

        System.out.printf("%d %n", (a++ + a++));

System.out.printf("%d %n", a);

    }

}


//결과

6





4.대입 연산자 = 복합대입연산자


자료형 변수 = 데이터; // 데이터를 변수에 대입시킨다.

자료형 변수 = 구문;   // 구문의 결과 값인 데이터를 변수에 대입시킨다.


자료형 변수 += 데이터;  //-> 자료형 변수 = 변수 + 데이터 를 의미함.

자료형 변수 -= 데이터;  //-> 자료형 변수 = 변수 - 데이터 를 의미함.

자료형 변수 *= 데이터;

자료형 변수 /= 데이터;

자료형 변수 %= 데이터;




5. 관계 연산자 > >= < <= instanceof

-> 결과값은 true, false만 리턴.


a > b     a의 값이 b보다 큰지 확인해주는 연산자. 

a >= b    a의 값이 b보다 크거나 같은지 확인해주는 연산자. 


예제는 조건 연산자 문제와 함께 확인가능.



6. 조건 연산자(삼항연산자) ? :


자료형 변수 = (조건)? 값1 : 값2;

-> 조건의 결과가 true이면 값1, false이면 값2를 리턴.




문제) 두 개의 숫자 중에서 가장 큰 숫자 구하기.

실행 예)

숫자1? X

숫자2? Y

입력 받은 숫자: X, Y

가장 큰 숫자: X



문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기.

실행예문)

숫자1? X

숫자2? Y

숫자3? Z

입력 받은 숫자: X, Y, Z

가장 큰 숫자: X




문제) 세 개의 숫자 중에서 가장 작은 숫자 구하기.

숫자1? X

숫자2? Y

숫자3? Z

입력 받은 숫자: X, Y, Z

가장 작은 숫자: X






7. 등가 연산자 == !=

-> 결과값은 true, false를 리턴.
-> 기본자료형인 경우에만 정상적으로 결과출력가능.


변수 == 데이터 -> 변수의 값이 데이터와 같은지 확인.

변수 != 데이터 -> 변수의 값이 데이터와 같지 않은지 확인.



참조형(String..)인 경우는 == 연산으로 비교 불가. equals() 메소드를 이용했을때만 참조형의 값 비교가 가능함.
참조형은 기본 자료형과는 달리 메모리 내부적으로 참조주소값을 사용하기 때문에 등가 연산자가 사용이 되지 않는 것임.
(equals()는 참조주소값이 아닌 실제 진짜 데이터를 비교하는 메소드)


잠깐!!!    if 구문에 대해


if (조건) {

//조건이 참인 경우 실행할 부분

}else{

//조건이 거짓인 경우 실행할 부분

}




등가연산자의 사용방법 예

import java.io.*;


public class Test16 {

    public static void main (String [] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        

        System.out.print("비밀번호(숫자만 입력 가능)?");

        String password = br.readLine();

        

        /*

        //비교연산을 수행하기 위해서 양쪽의 데이터 타입(자료형)을 일치시켜야 한다.

        if(Integer.parseInt(password) == 1234){

            System.out.println("암호가 맞습니다.");

        }else{

            System.out.println("암호가 틀렸습니다.");

        }

        */

        

        //문자열 자료형을 비교하는 올바른 방법.

        if(password.equals("1234")){

            System.out.println("암호가 맞습니다.");

        }else{

            System.out.println("암호가 틀렸습니다.");

        }

    }

    

}


//결과

비밀번호(숫자만 입력 가능)?1234

암호가 맞습니다.





tips. 메소드에 대한 짧은 설명


Integer 클래스에서 Integer.parseInt(**)에서 parseInt(**)는 클래스의 하위 멤버중 하나인 메소드



WRITTEN BY
빨강꼬마

,