✅네이버클라우드 캠프/개발일기

[네이버클라우드캠프] 27일차. 자바기초 클래스와 메소드, assignment, final,

우동한그릇 2023. 6. 1. 18:50
반응형

 

 

* assignment oprator

i = 7;

j = i++

 

i = ?

j = ?

 

       l-value   =    r - value;

                    ②         ①

      변수                  리터럴,변수,표현식

 

실행순서)

                   compile

예 j = i ++;       →      int temp = i;

                                 i = i+1;

                                 j = temp;

 

항상 assignment는 ① 우측의 연산이 끝난 뒤② 좌측의 연산을 수행한다.

때문에 후위연산자는 i의 값을 규정해준 뒤에 i 값을 증가시키기 때문에

모순이 발생하게된다. 그렇기 때문에 i 값을 temp라는 값에 임시 저장을 해두고

i의 값을 1 증가시키고 j의 값에는 임시 저장한 temp 값을 주어 해결한다.

 

* Final 

final class A { <- 서브 클래스 생성 불가 class B extends A 

        final void mcl{..} <- overriding 불가 (서브 클래스에서 재정의 불가)

        final int a = 100; <- 값 변경 불가 (상수 ; constant)

 

* 메서드 : 특정 기능을 수행하는 명령문들을 관리하기 쉽게 묶는 방법

리턴 데이터의 타입   메서드명(아규먼트를 받을 변수 목록) {

명령순                                         ↑작업을 수행하는데 필요한 값

 

return 작업결과값;

}

                    

ex) int plus(int a, int b)  {         int sum = a + b;   * 메서드 실행 (method call) ex) int r = plus(100, 200);         return sum ;}

 

* 클래스와 메소드에 대한 설명

  public static void main(String[] args) { //메인 메소드
    //int
    int userid = 1; //인스턴스 변수

    printTitle(); // printTitle 메소드 호출

}

  static void printTitle() { //메소드
    System.out.println("나의 목록 관리 시스템");
    System.out.println("----------------------");
  }

 

 

클래스 안에는 여러 개의 메소드가 포함될 수 있다.

메소드는 클래스의 동작을 정의하고, 해당 클래스의 인스턴스에서 호출되어 실행

클래스의 main 메소드는 프로그램의 시작점이며, 

클래스의 정적(static) 메소드로서 클래스의 인스턴스를 생성하지 않고도 호출될 수 있음

main 메소드는 프로그램의 실행 흐름을 시작하고 다른 메소드들을 호출하여 필요한 동작을 수행

클래스의 인스턴스 변수는 해당 클래스의 인스턴스가 생성될 때 메모리에 할당되는 변수이다.

인스턴스 변수는 클래스 내부의 모든 메소드에서 접근할 수 있으며, 

인스턴스 변수는 해당 클래스의 인스턴스의 상태를 나타낸다.

따라서 메소드들은 클래스의 인스턴스 변수를 참조하고 사용할 수 있다.

메소드의 파라미터는 메소드에 전달되는 값을 나타냄.

파라미터는 메소드 선언 시 괄호 안에 정의되며, 메소드 호출 시 해당 값이 인자(argument)로 전달됩니다.

메소드는 파라미터를 통해 외부로부터 값을 받아와서 처리하거나, 값을 반환하는 등의 동작을 수행할 수 있습니다.

메소드 내부에서는 파라미터를 활용하여 해당 값을 사용하거나 변경할 수 있다.

따라서, 인스턴스 변수를 메소드의 파라미터로 사용할 수 있으며

이를 통해 메소드는 외부에서 전달된 인스턴스 변수 값을 활용하여 원하는 동작을 수행

 

예습

 

클래스 (Class): 클래스는 객체를 생성하기 위한 설계 도구로, 객체의 상태와 동작을 정의합니다. 클래스는 변수와 메소드로 구성됩니다.

메소드 (Method): 메소드는 클래스 내부에 정의된 동작 블록으로, 특정한 작업을 수행합니다. 메소드는 입력값을 받아서 처리하고, 결과를 반환할 수도 있습니다.

인스턴스 변수 (Instance Variable): 인스턴스 변수는 클래스 내에서 선언된 변수로, 객체의 상태를 나타냅니다. 인스턴스 변수는 객체마다 별도의 메모리 공간에 저장되며, 객체가 생성될 때 초기화됩니다.

private: private는 접근 제어자로, 해당 멤버를 선언한 클래스 내에서만 접근할 수 있도록 제한합니다. private로 선언된 인스턴스 변수는 외부에서 직접 접근할 수 없으며, 접근을 위해서는 해당 클래스의 메소드를 사용해야 합니다.

this: this는 객체 자신을 참조하는 키워드로, 인스턴스 메소드 내에서 현재 객체를 가리킵니다. this를 사용하여 인스턴스 변수에 접근하거나 메소드를 호출할 수 있습니다.

static: static은 정적 키워드로, 클래스 수준의 멤버를 나타냅니다. static으로 선언된 변수나 메소드는 객체의 생성 없이 클래스 이름으로 직접 접근할 수 있습니다.

클래스와 메소드를 사용하여 객체를 생성하고, 인스턴스 변수를 사용하여 객체의 상태를 표현하며, private을 이용하여 외부에서의 접근을 제한할 수 있습니다. this를 사용하여 객체 자신을 참조하고, static을 사용하여 클래스 수준의 멤버를 사용할 수 있습니다. 이러한 개념들을 종합적으로 이해하면 객체 지향 프로그래밍의 기본 요소를 이해할 수 있습니다.

 


https://dev-with-gpt.tistory.com/98

 

자바 프로그래밍. 배열 : 나의 목록 관리 시스템 구현 (여러가지 값 입력받기)

https://dev-with-gpt.tistory.com/88 자바 프로그래밍. 배열 : 나의 목록 관리 시스템 구현 (여러가지 값 입력받기) 오늘 수업은 Scanner를 통해 사용자에게 Data를 입력받고 해당 정보를 저장하여 출력해주는

dev-with-gpt.tistory.com

 

 

프로그램에 대한 설명 : 수정된 부분

수정된 부분:

  1. MAX_SIZE 상수를 final static으로 선언하여 고정된 값을 사용
  2. printTitle 메소드를 추가하여 타이틀을 출력
  3. inputMember 메소드에서 menuNO 변수를 받도록 변경 (Scanner사용)
  4. switch 문을 통해 성별을 입력받도록 함 (while과 switch 사용하여 성별 분류)
  5. promptContinue 메소드에서 조건문을 수정하여 사용자가 Y 또는 y를 입력하면 계속 실행
  6. printMembers 메소드에서 회원 정보를 출력하는 부분을 추가
  7. 사용자에게 회원 정보를 입력받고 출력하는 기능을 가진 목록 관리 시스템을 구현
package bitcamp.myapp;
import java.util.Scanner;

public class App3 {
  final static int MAX_SIZE = 3; // 배열 길이

  public static void main(String[] args) {
    //int
    int userid = 1;
    int length = 0;

    // 타이틀 메소드 출력
    printTitle();
  
    //배열생성
    int[] num = new int[MAX_SIZE];
    String[] name = new String[MAX_SIZE];
    String[] email = new String[MAX_SIZE];
    String[] password = new String[MAX_SIZE];
    char[] gender = new char[MAX_SIZE];

    //  키보드 스캐너 준비
    Scanner keyboardScanner = new Scanner(System.in);

    // for문 배열 입력 (회원정보 입력)
    for (int i = 0; i < MAX_SIZE; i++) {
      inputMember(keyboardScanner, i, name, email, password, gender, num);
      length++;
      if (!promptContinue(keyboardScanner)) {
        break;
      }
    }

    // 회원정보 출력
    printMembers(num, name, email, gender);
    keyboardScanner.close();
  }



  // methods
  static void printTitle() {
    System.out.println("나의 목록 관리 시스템");
    System.out.println("----------------------");
  }

  static void inputMember(Scanner keyboardScanner, int i, 
      String[] name, String[] email, String[] password, 
      char[] gender, int[] num) {

    System.out.print("이름은? ");
    name[i] = keyboardScanner.nextLine();

    System.out.print("이메일은? ");
    email[i] = keyboardScanner.nextLine();

    System.out.print("암호는? ");
    password[i] = keyboardScanner.nextLine();

    loop: while (true) { //true가 나올 때까지 반복한다.(라벨생성)
      System.out.print("성별은? (1. 남자 / 2. 여자) ");
      String menuNO = keyboardScanner.nextLine(); 

      switch (menuNO) {  // if문 대신 사용가능. break때문에 loop 사용해야한다.
        case "1":
          gender[i] = 'M';  
          break loop;
        case "2":
          gender[i] = 'W';  
          break loop;
        default:
          System.out.print("무효한 번호입니다.\n");
      }
    }
    num[i] = i + 1;
  }

  static boolean promptContinue(Scanner keyboardScanner) {
    //계속 진행 할 것인지 확인
    System.out.print("계속 하시겠습니까? (Y/n): ");
    String choice = keyboardScanner.nextLine(); // Enter를 빈문자열로 인식한다.
    System.out.println("");
    if (!choice.equals("") && !choice.equalsIgnoreCase("Y")) { // ignoreCase는 대소문자를 구분x
      System.out.println("실행을 종료합니다.");
      return false;
    } else {
      return true;
    }
  }

  static void printMembers(int[] num, String[] name, String[] email, char[] gender) {
    //출력
    System.out.println("------------------------------");
    System.out.println("번호, 이름, 이메일, 성별");
    for (int i = 0; i < MAX_SIZE; i++) {
        System.out.printf("%d %s %s %c\n",
            num[i], name[i], email[i], gender[i]);
    }
  }
}

 

[출력결과]

반응형