지금까지 공부한 내용을 바탕으로 회원가입 프로그램을 만들어보자.

import java.util.Scanner;

public class UserRegister {

    public static void main(String[] args) {

        System.out.println("======================");
        System.out.println("회원등록");
        System.out.println("======================");

        boolean register = false;
        Scanner sc = new Scanner(System.in);

        while (!register) {

            System.out.println("회원가입을 하시겠습니까?\ny: 진행    n:취소");
            System.out.print(">> ");
            String register_input = sc.nextLine();

            if (register_input.equalsIgnoreCase("y")) {
                register = true;
                System.out.println("======================");
                System.out.println("회원가입이 진행됩니다.");
                System.out.println("======================");
            } else if (register_input.equalsIgnoreCase("n")) {
                System.out.println("======================");
                System.out.println("회원가입이 종료됩니다.");
                System.out.println("======================");
                System.exit(0);
            } else {
                System.out.println("입력 값을 확인해주세요.");
            }
        }

다른 것과 혼동할 수 있기 때문에 구분할 수 있도록 꾸민다. 사용자에게 입력 받기 위해 Scanner를 자바 라이브러리에서 불러온다.(ctrl + space를 눌러 java.util 스캐너 객체를 불러온다.) in 인자를 통해 외부의 입력을 받도록 한다.

사용자로 하여금 올바르지 않은 값을 입력했거나 값을 다시 입력해야할 때, 프롬프트(입력창)를 띄우는 반복작업을 위해 반목문을 작성한다. println은 무조건 문자를 출력하고 개행한다. 개행하지 않고 사용자가 입력하는 커서가 되기 위해 print 함수를 쓴다. nextLine 함수는 문자열을 입력 받았을 때, 사용자의 입력을 대기하고 값을 입력한 뒤 엔터를 치면 변수에 값이 할당되며 다음 로직으로 이어진다.

if 문을 통해 문자를 입력 받았을 때, while 문의 불리언 값을 true로 만들어 반복문을 빠져나오도록 한다. y를 입력 받았을 때는 다음 로직이 실행되고, n을 입력 받았을 때는 프로그램이 종료되도록 한다. 만약 y와 n이 아닌 다른 문자를 입력 받았을 경우, 다시 처음으로 돌아가도록 한다.

 

ArrayList users = new ArrayList();

while (true) {

    HashMap user = new HashMap();

    // ID
    System.out.print("ID: ");
    String username = sc.nextLine();

	// PW
	String password = "";
	while (true) {
		System.out.print("PW: ");
		password = sc.nextLine();
		System.out.print("PW 확인: ");
		String password_confirm = sc.nextLine();

        if (password.equals(password_confirm)) {
            break;
		} else {
            System.out.println("======================");
            System.out.println("패스워드가 일치하지 않습니다.");
            System.out.println("패스워드를 다시 입력해주세요.");
	        System.out.println("======================");
        }
    }

	// 이름
	System.out.print("성명: ");
	String name = sc.nextLine();

	// 생년월일(6자리)
	String birth_date = "";
	while (true) {
		System.out.print("생년월일(6자리): ");
		birth_date = sc.nextLine();
		if (birth_date.length() == 6) {
			break;
		} else {
			System.out.println("======================");
			System.out.println("생년월일 자릿수가 올바르지 않습니다.");
	        System.out.println("생년월일을 다시 입력해주세요.");
         	System.out.println("======================");                    
		}
	}

	// 이메일
	System.out.print("이메일: ");
	String email = sc.nextLine();

가입된 회원정보를 저장하기 위해 ArrayList를 만들어준다. 회원가입을 진행할 것인지 묻기 위해 while 문을 작성해준다. while 문이 무조건 실행되도록 true를 입력한다. 각각의 유저 한 명씩을 담아 항목별로 관리할 수 있도록 HashMap으로 변수를 선언한다.

입력받는 값이 아이디라는 것을 알려주고 값을 입력 받은 뒤 엔터를 치면 다음으로 넘어가도록 한다.

변수를 선언한 뒤, while 문으로 입력받은 비밀번호와 확인칸의 비밀번호 값을 비교한다. if 문을 통해 값이 같다면 while 문을 break를 통해 빠져나오고, 값이 다르면 다시 입력받도록 돌아간다.

이름과 생년월일, 이메일을 입력받는다. 생년월일은 6자리로 제한한다. 6자리가 아닌 경우, 처음부터 다시 입력받도록 while 문을 쓴다. 변수는 밖에서 참조해야하는 데이터이기 때문에 외부에서 변수를 선언한다. length 함수로 6자리인지 확인한다.

 

user.put("username", username);
user.put("password", password);
user.put("name", name);
user.put("birth_date", birth_date);
user.put("email", email);

users.add(user);

System.out.println("------------------------");
System.out.println(user.get("name") + " 님, 가입을 환영합니다.");
System.out.println("ID는 " + user.get("username") + " 입니다.");
System.out.println("------------------------");

System.out.println("회원가입을 이어서 진행하시겠습니까?\ny: 진행    N:취소");
System.out.print(">> ");
String register_again = sc.nextLine();

if (register_again.equalsIgnoreCase("y")) {
	;
} else if (register_again.equalsIgnoreCase("n")) {
    System.exit(0);
}

put을 통해 HashMap에 각각 키-값 쌍으로 데이터를 구성하여 추가한다.

모든 회원이 저장되는 ArrayList에 우리가 지금까지 만든 user라는 HashMap 객체를 추가하여 전체 회원장부에 가입한 회원정보를 등록한다.

 

 

'Back-End > Java' 카테고리의 다른 글

예외 - 예외 처리  (0) 2023.05.19
객체지향 - 객체지향 프로그래밍  (0) 2023.05.18
함수  (0) 2023.05.15
자료구조 - 배열, 리스트, 맵  (0) 2023.05.12
제어문 - 조건문과 반복문  (0) 2023.05.11
함수(Methods)

프로그래밍에서는 한줄의 코드가 아니라 여러 줄의 코드를 조합해서 작업을 수행한다. 그런데 반복적으로 어떤 작업을 처리해야 할 때, 동일한 코드를 여러 번 작성하는 것은 비효율적이다. 그렇기 때문에 어떠한 하나의 작업단위를 이루는 여러가지 코드를 한 묶음으로 만들어서 재사용 할 수 있도록 만든 것이 바로 함수, 또는 메서드라고 한다.

일반적으로 메서드(Method)는 클래스(class)의 기능적인 부분을 나타내는 함수(function)를 나타내는데, 자바에서는 모든게 클래스로 관리되기 때문에 메서드라는 이름으로 통용하고 있다.

 

1. 입력과 출력이 모두 있는 경우

출력은 콘솔의 문자 출력이 아닌 데이터 반환을 뜻한다.

static int mod (int a, int b) {
    int result = a % b;
    return result;
}

반환할 데이터 타입을 정한 후, 메서드의 이름을 정의한다. 괄호 안에는 매개변수, 즉 파라미터(parameter)로 정의한다. 그리고 매개 변수로 받은 값을 함수에서 어떤 식으로 사용할지에 대해 코드로 표현한다. 다시 데이터를 반환해서 사용할 수 있도록 하기 위해 return함수를 사용한다.

 

2. 입력은 있는데 출력은 없는 경우

static void printNum (int a) {
    System.out.println(a);
}

출력이 없다는 것은 아무런 데이터형으로도 만들 필요가 없다는 뜻이기 때문에 void라는 키워드를 작성한다. 서로 다른 메소드에서 쓰이는 변수들은 함수 내에서만 공유되므로 이름이 같아도 서로 공유되지 않는다. 위의 코드는 콘솔에서 출력될 뿐, a로 입력받은 데이터를 이후에 활용할 수 있도록 메모리에 저장해주지 않는다. 즉, 콘솔로 출력 후, a라는 데이터는 시스템에서 휘발된다.

 

3. 입력은 없는데 출력이 있는 경우

static String greeting() {
    return "Hello!";
}

입력값이 없기 때문에 파라미터 자리에는 아무 것도 입력하지 않는다. 그리고 위에서 지정한 데이터 타입인 문자열(String)을 리턴할 수 있도록 String 값을 넣어준다.

 

4. 입력과 출력이 모두 없는 경우

static void greeting_2() {
    System.out.println("Hello!");
}

위 코드는 콘솔로 출력만 하고 데이터 자체는 휘발된다.

 

static 안에서 실행되기 위해서는 함수에도 static이 붙어있어야한다.

 

이제 위의 모든 경우의 함수를 main에서 실행해보자.

public static void main(String[] args) {
	int mod_result = mod(3, 2); // 1번의 경우
	System.out.println(mod_result); // 1

	printNum(10); // 2번의 경우 // 10

	String str = greeting(); // 3번의 경우
	System.out.println(str); // Hello!

	greeting_2(); // 4번의 경우 // Hello!
}

 

 

'Back-End > Java' 카테고리의 다른 글

객체지향 - 객체지향 프로그래밍  (0) 2023.05.18
회원가입 프로그램 실습 - 자바(Java) 편  (1) 2023.05.16
자료구조 - 배열, 리스트, 맵  (0) 2023.05.12
제어문 - 조건문과 반복문  (0) 2023.05.11
연산자  (0) 2023.05.10
배열(Arrays)

어떤 특정한 자료형에 대해 그 자료형을 모아놓은 자료구조

 int[] price = {10000, 9000, 40000, 7000};
String[] mbti = {"INFP", "ENFP", "ISTJ", "ESTP"};

System.out.println(price[0]); // 10000
System.out.println(mbti[0]); // INFP

대괄호 [ ] 앞의 int나 String은 뒤에 올 변수에 들어가는 자료형을 지정해준다. 변수를 선언할 때 작성했던 타입의 자료열로만 구성된 배열을 선언한다. 변수에 들어있는 값을 꺼내고 싶다면 호출하고 싶은 값의 인덱스를 대괄호에 넣어준다.

배열 인덱스의 값을 임의의 값을 수정하는 방법은 간단하다.

price[1] = 8000
System.out.println(price[1]); // 8000

값을 가져온 뒤, 대입 연산자를 통해 값을 새롭게 대입하면 기존의 값에 덮어씌워진다.

배열을 확인하고 싶다고 아래처럼 직접 배열의 변수를 함수에 전달하면 아마 이상한 값이 나올 것이다.

System.out.println(price);

변수 역시 객체이기 때문에 값 자체를 드러내지 않고 주소값이 나온다.

 

for 반복문을 통한 배열의 조작

 int[] price = {10000, 9000, 40000, 7000};
String[] mbti = {"INFP", "ENFP", "ISTJ", "ESTP"};

for (int i = 0; i < mbti.length; i++) {
    System.out.println(mbti[i]);
}

for 문에 초기화식, 조건식, 증감식을 써준다. length 함수는 배열의 크기를 구해준다. 결과를 출력하려면 배열의 이름과 변수를 써주면 된다.

 

 

리스트(Lists)

순서를 구분하고 중복을 허용하는 자료구조

리스트의 종류에는 Vector, ArrayList, LinkedList가 있다. 그 중 가장 대중적으로 많이 쓰이는 ArrayList에 대해 알아보자.

ArrayList는 배열보다 폭넓은 메서드, 각종 확장된 기능을 제공한다.

ArrayList list = new ArrayList(10);
list.add(100);
	list.add("INFP");

for (int i = 0; i < list.size(); i++) {
	System.out.println(list.get(i));
}

ArrayList라는 객체 자료형을 선언한 뒤, 변수와 new 연산자를 사용하여 인자로 길이를 정해준다. add 메서드는 타입을 지정하지 않아도 리스트에 추가할 수 있다.  데이터 타입을 제한하고 싶다면 ArrayList 뒤에 꺽쇠< >에 제한하고 싶은 자료형의 객체타입(Integer, String 등)을 쓰면 된다. 자료형을 제한할 때는 기본형 데이터(int 등)를 쓸 수 없다.

 

 

맵(Map)

키-값 쌍을 요소로 가지는 데이터의 모음

맵은 순서를 구분하지 않는다. 키는 중복이 불가능하고, 값은 중복이 가능하다.

맵에도 여러가지 종류가 있지만 가장 많이 쓰이는 HashMap에 대해 알아보자.

HashMap<String, String> map = new HashMap();
map.put("age", "30");
map.put("mbti", "INFP");

System.out.println(map.get("age"));

HashMap은 선언한 뒤, 인자를 넣지 않아도 된다. put 메서드로 키-값을 넣는다.

결과를 출력할 때는 리스트와 똑같이 get 메서드를 사용하는데 인덱스 값이 아닌 키를 넣어야 그에 대응되는 값을 출력한다. 데이터 타입을 제한하고 싶다면 리스트와 마찬가지로 꺽쇠를 이용하여 객체타입을 지정해주면 된다.

 

 

'Back-End > Java' 카테고리의 다른 글

회원가입 프로그램 실습 - 자바(Java) 편  (1) 2023.05.16
함수  (0) 2023.05.15
제어문 - 조건문과 반복문  (0) 2023.05.11
연산자  (0) 2023.05.10
콘솔 입출력  (0) 2023.05.09
조건문(Conditional)

if 문

int a = 1;
int b = 100;

if (a == b) {
    System.out.println("a == b");
} else if (a < b) {
    System.out.println("a < b");
} else if (a <= b) {
    System.out.println("a <= b");
} else {
    System.out.println("else");
} // a < b

if가 참일 때, 코드를 실행한다. if가 거짓이라면 else를 실행한다.

조건을 여러 개 하고 싶다면 else if를 사용한다. 다중 조건문일 경우, 조건을 만족하는 다른 조건문이 있어도 최초의 분기만 실행한다.

 

switch 문

int a = 10;

switch (a + 1) {

    case 9:
        System.out.println("a + 1 == 9");
    case 10:
        System.out.println("a + 1 == 10");
    case 11:
        System.out.println("a + 1 == 11");;
}

switch의 값이 일치하는 case인 "a + 1 == 11"가 출력된다. 그렇다면 거꾸로 나열하면 어떻게 될까?

int a = 10;

switch (a + 1) {

    case 11:
        System.out.println("a + 1 == 11");
    case 10:
        System.out.println("a + 1 == 10");
    case 9:
        System.out.println("a + 1 == 9");;
}

황당하게도 "a + 1 == 11", "a + 1 == 10", "a + 1 == 9" 모두 출력된다. case 같은 경우에는 조건을 만족했다고 조건문을 끝내지 않는다. 조건을 끝내고 싶다면 아래처럼 break라는 키워드를 작성해야 빠져나갈 수 있다.

int a = 10;

switch (a + 1) {

    case 11:
        System.out.println("a + 1 == 11");
        break;
    case 10:
        System.out.println("a + 1 == 10");
        break;
    case 9:
        System.out.println("a + 1 == 9");
         break;
    default:
        System.out.println("default");
}

default는 모든 case에 만족하지 않을 경우 실행되는 코드이다.

 

 

반복문(Loops)

어떠한 작업을 반복적으로 수행할 수 있도록 하는 형식

 

for 문

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

for 문을 만들려면 괄호( ) 안에 먼저 int 형태의 초기화된 변수를 만들어준다. 그리고 변수의 범위를 정해준다. 조건식이 없으면 반복문이 계속 수행되어 무한루프에 빠지게 된다. i가 1씩 늘어나도록 ++ 증감식을 붙여준다. 이렇게하면 i가 10보다 작을 때까지 1씩 커지며 반복한다.

즉, 정리하면 for 문에는 초기화된 변수, 조건식, 증감식이 있어야한다.

 

while 문, do-while 문

int b = 10;

while (b > 0) {
System.out.println(b);
b--;
}

for 문은 초기화된 변수를 내부에서 만들지만 while 문은 보통 외부에서 만든다.

int b = 0;

do {
	System.out.println(b);
    b--;
} while (b > 0);

do-while 문은 일단 do로 조건없이 실행을 시킨 뒤, 중괄호{} 뒤에 while을 붙여 실행한다. do-while 문은 while 문과 다르게 먼저 실행 후, 조건문을 반복한다. 즉, while 문에 있는 조건과 무관하게 최초 한 번은 무조건 실행하는 반복문이다.

 

 

'Back-End > Java' 카테고리의 다른 글

함수  (0) 2023.05.15
자료구조 - 배열, 리스트, 맵  (0) 2023.05.12
연산자  (0) 2023.05.10
콘솔 입출력  (0) 2023.05.09
String 문자열  (2) 2023.05.09

+ Recent posts