공부/Java

Java ClassMethod

726582776982 2022. 4. 22. 11:07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package j04_array;
import java.util.*;
public class Ex04_Lottos02 {
    public static void main(String[] args) {
// 1) 배열 생성 : lotto
          int[] lotto = new int[6];
          
          // 2) Random으로 배열 초기화
          Random rn = new Random();
          
          for (int i=0; i<lotto.length; i++) {
             // random number추출 & 배열에 담기
             lotto[i]=rn.nextInt(45)+1;  // 정수/45 -> 나머지값의 범위 0 ~ 44
             System.out.println(""+lotto[i]);
             // 3) 중복값 확인하기
             for (int j=0; j<i; j++) {
                if (lotto[i]==lotto[j]) {
                   --i; break;
                } //if
             } //for_j
          } //for
          // 4) 출력
          System.out.println("** Lotto => "+Arrays.toString(lotto));
          
          // 5) 오름차순 정렬 -> 최솟값 정렬 // 내립차순 정렬 -> 최댓값 정렬
          // => 순차정렬 (Sequence Sort)
          // => 정렬 알고리즘에서 가장 간단하고 기본이되는 알고리즘으로
          //    배열의 처음과 끝을 탐색하면서 차순대로 정렬하는 가장 기초적인 정렬 알고리즘
          // ** 정렬 알고리즘 : 삽입(insert)정렬, 합병(Merge)정렬, 퀵(Quick)정렬...
          // => https://blog.naver.com/tepet/221690306235
          int temp=0;
          for(int i=0;i<lotto.length;i++) {
              for(int j=i+1;j<lotto.length;j++) {
                  //if(lotto[i]>lotto[j] // ** 내림차순 => i보다 큰 j가 있으면 서로 맞바꾼다.
                  if(lotto[i]>lotto[j]) { // **오름차순 => i보다 작은 j가있으면 서로 맞바꾼다.
                      temp = lotto[i];
                      lotto[i] = lotto[j];
                      lotto[j] = temp;
                  }//if
              }//for j
          }//for i
          System.out.println("** Lotto2 => "+Arrays.toString(lotto));
          
          // 6) WrapperClass : Arrays
          // => toString(), sort(), equals( , )// equals 안에 데이터값이 같은지를 비교
          int[] myLotto = {13,7,5,2,19,34};
          Arrays.sort(myLotto);
          System.out.println("** my Lotto => "+Arrays.toString(myLotto));
          
          if(Arrays.equals(lotto, myLotto))System.out.println("당첨!!!");
          else System.out.println("다음기회에 ....");
    }//main
}//class
cs

저번 예제 포스팅 ++ 이다.


Class Method

//** 클래스, 객체, 인스턴스(instance : 사례, 경우)
//클래스와 인스턴스는 설계도와 제품이라고 할수있다.
//그럼 객체는 클래스일까 인스턴스일까?
//Java 프로그래밍에서는 설계도인 클래스가
//메모리상의 구체적인 실체인 인스턴스가 되었을때 객체라고 부른다.
 
//보통은 구체적인 코드상에서 나타는 객체를 인스턴스라고 부르고,
//로직을 설계할때 나타나는 인스턴스를 객체라고 부른다.
//그러므로 클래스와 인스턴스는 구별되고, 클래스와 객체도 구별되지만,
//객체와 인스턴스는 구분없이 포괄적으로 객체라는 말을 쓰기도 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Ex01_Car {
// ** 맴버변수, 필드(field) : 속성 
    // => 클래스의 전역변수
    //    클래스내에서는 모든 메서드에서 사용가능
    public int speed=100;    //속도
    public int mileage=120;  //주행거리
    public String color="white"//색상    
//color="Yellow"; // 실행문 -> 메서드 내부에만 작성가능
    // ** 맴버메서드 (function, procedure)
    // => 동작 또는 기능을 구현
    public void speedUp() {
    // ** 지역변수
        // => 메서드내부에서만 사용가능
        // => 전역변수와 동일명 가능 (내부에서는 지역변수 우선)  
        int price = 3000;  
        String color = "Blue" ;
        System.out.println("** speedUp: price="+price+" color="+color); 
        speed+=100;
        mileage+=10;
    }
    public void speedDown() {
        speed-=100;
    }
// String (return Type) : 문자열을 반환(return) -> 메서드 처리 결과로 문자열을 제공
    // toString (메서드명) : 객5체의 속성(맴버필드,맴버변수) 의 값을 문장열로 제공하는 역할에 주로 사용됨    
    public String toString() { 
        return "[ 속도:"+speed+" 주행거리:"+mileage+" 색상:"+color+" ]";
    }
 
//class
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class Ex01_CarUser {
    public static void main(String[] args) {
// ** 객체 생명주기
        // => 생성 -> 사용 -> 소멸
        // => 생성: 인스턴스화 한다 또는 인스턴스를 생성한다 라고함
    Ex01_Car myCar = new Ex01_Car();  // 객체의 인스턴스화
    Ex01_Car yourCar = new Ex01_Car();  // 객체의 인스턴스화 = 생성자
    myCar.speed = 130;
    myCar.mileage = 100;
    myCar.color ="violet";
    myCar.speedUp();
    myCar.speedDown();
    System.out.println("** myCar => "+myCar.toString());
    System.out.println("** toString 의 장점 =>"+myCar);
// =>출력문에서 인스턴스명만 사용했을때 자동호출됨
    // => toString 메서드를 정의하지 않으면 인스턴스의 주소값을 제공함
    // => 인스턴스도 참조형 변수다.
    Ex01_Car fCar = myCar;
// => myCar와 동일한 주소를 가짐
    System.out.println("**fCar=> "+fCar);
// ** 소멸 : 메모리청소
    // => 더이상 사용되지않는 값들은 자동제거해줌
    // => Garbage Collector (쓰레기수집기)
    // => 정해진 알고리즘에 의해 작동됨 ( 일정시간동안 더이상 참조되지않는등등... )
    // => 참조형 변수에 null 값을 주면 소멸(더이상 참조되지않음)
    // => 더이상 사용되지않는 값들은 자동제거해줌
    // => Garbage Collector (쓰레기수집기)
    // => 정해진 알고리즘에 의해 작동됨 ( 일정시간동안 참조되지않음 )
    북마크 참조.
    myCar = null// null -> 값 없음
    //myCar.color="pink";// 컴파일 오류는 없으나.
    System.out.println("**fCar2=> "+fCar);
    //java.lang.NullPointerException: Cannot assign field "color" because "myCar" is null
    //런타임 오류 발생
    yourCar.speed = 10;
    yourCar.mileage = 120;
    yourCar.color = "while";
    yourCar.speedDown();
    System.out.println("** yourCar => "+yourCar.toString());
    }
}
cs

//** 맴버 메서드 (method) : 함수(Function), 프로시져(Procedure)
//1) 정의 , 실행

 

//2) return 값
//=> return 이 있으면 Type 을 지정, 없으면 무조건 void 
//=> 메서드 실행결과 return Type에 해당하는 결과값을 제공
//=> return 명령어를 void 메서드 에서 사용하면 메서드 종료
 
//3) 매개변수 전달 방법
//=> 매개변수(Argument, 인자), Parameter
//=> 메서드의 지역변수이며, 모든 타입 가능
//=> 매개변수의 값 전달방법
//CallByValue (기본자료형, String -> 매개변수의 값 전달)
//CallByReference (참조자료형: 배열,인스턴스 -> 주소전달)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import java.util.*;
public class Ex02_Method {
//1. 종류별 메소드 정의
    //2. return 값 테스트
    //   => return 값 활용 (main 에서 Test)
    int price = 5000// 전역(멤버)변수
//1) 매개변수, return 값 없음
    public void juiceCafe() {
        System.out.println("무슨 쥬스를 원하시나요 ? ");
    }
//2) 매개변수는 있고, return 값 없음
    //=> 매개변수는 지역변수와 동일하다.
    public void juiceCafe2(String s,int n) {
        //s = "홍길동";
        //n = 100;
        if((n<5)||(s.contains("불량"))) {
        System.out.println("주문오류입니다. \n");
        return ;
        }
        //CallbyValue Test
        s = "사과";
        System.out.printf("** %s 쥬스는 %d잔 이상 주문 \n",s,n);
    }
//3) 매개변수는 없고, return 값 있음
    public String juiceCafe3() {
        return "쥬스 1잔은" + price + " 원 입니다.";
    }
//4) 매개변수도 있고, return 값도 있음.
    public int juiceCafe4(int n, String s) {
        System.out.printf("** %s 쥬스 %d잔 주문 \n",s,n);
        return n*price;
    }
    //5) 매개변수도 있고, return 값도 있는 
    //   참조 자료형Test
    public int carTest(Ex01_Car car,int speed) {
        System.out.println("** car => "+car);
        System.out.println("** car_color => "+car.color);
        System.out.println("** car_mileage => "+car.mileage);
        car.color = "Pink";
        return speed+car.speed;
    }
    public static void main(String[] args) {
        // ** 메소드 호출(Call)
        // => 같은 클래스에서도 메소드에 접근하기 위해서는 인스턴스가 필요하다.
        Ex02_Method cafe = new Ex02_Method();
        Scanner sc = new Scanner(System.in);
//String kind = "오렌지";
        Ex01_Car mycar = new Ex01_Car();
        System.out.println("** before color => "+mycar.color);//참조자료형 Test
        System.out.println("** call carTest => "+cafe.carTest(mycar, 50));//참조자료형 Test //인스턴스를 넣어도 가능
        System.out.println("** After color => "+mycar.color);//참조자료형 Test
         // ** 매개변수 생성 비교
         // => 매개변수 위치에서 바로 생성해도 됨
         // => Car 를 일회성 매개변수로만 사용하는 경우 적당
        System.out.println("");
        System.out.println("** Call carTest2 => "+cafe.carTest(new Ex01_Car(), 100)); // 해당 클래스를 객체화해도 가능하다.
 
        cafe.juiceCafe();
        String juices = sc.nextLine();
        System.out.printf("몇잔을 주문하시나요 ? ");
        int juices1 = sc.nextInt();
        cafe.juiceCafe2(juices, juices1);
        System.out.println("juiceCafe3 => "+cafe.juiceCafe3());
        System.out.println(cafe.juiceCafe4(juices1, juices)+"원");
        sc.close();
    } // main
 
// class
cs