* 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
프로그램에 대한 설명 : 수정된 부분
수정된 부분:
- MAX_SIZE 상수를 final static으로 선언하여 고정된 값을 사용
- printTitle 메소드를 추가하여 타이틀을 출력
- inputMember 메소드에서 menuNO 변수를 받도록 변경 (Scanner사용)
- switch 문을 통해 성별을 입력받도록 함 (while과 switch 사용하여 성별 분류)
- promptContinue 메소드에서 조건문을 수정하여 사용자가 Y 또는 y를 입력하면 계속 실행
- printMembers 메소드에서 회원 정보를 출력하는 부분을 추가
- 사용자에게 회원 정보를 입력받고 출력하는 기능을 가진 목록 관리 시스템을 구현
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]);
}
}
}
[출력결과]