본문 바로가기

콤퓨타/Programming) 왕초보 자바

27. (Loops and Conditions) Checking Password with Do-While (feat. 챗지피티 활용 위기관리)

 

Do-While을 이용한 비밀번호 확인 프로그램이다. 

근데 이미 여기서부터 좀 망한것 같은 느낌이다. 

 

여기 눌러보면 해당 게시글로 갈 수 있는데. 

그거랑 상관 없이 실제로 어떻게 왜 다른지 디테일 하게 생각하기를 뇌가 자꾸 포기하는 느낌임. 

이런 디테일까지 이해하기가 어렵다. 

 

 

여하튼 아래 코드를 보면 

일단 여기까지는 괜찮다. 

만약 패스워드 잘 치면 오케이 통과! 한다음에 끝. 

그렇지 않다면 '다시 쓰세요' 하고 무한반복 하는 모양새다. 

import java.util.Scanner;

public class App {

	public static void main(String[] args) {

		final String USER_PASSWORD = "1234asdf";

		Scanner scanner = new Scanner(System.in);

		while (true) {

			System.out.println("Enter password> ");
			String password = scanner.nextLine();

			if (password.equals(USER_PASSWORD)) {
				System.out.println("Access Granted.");
				break;
			} else {
				System.out.println("Access Denied.");
			}
		}

		scanner.close();
	}

}

 

 

 

do-while의 기본은, '일단 한번은 무조건 한다' 이다. 

import java.util.Scanner;

public class App {

	public static void main(String[] args) {

		final String USER_PASSWORD = "qwer";

		Scanner scanner = new Scanner(System.in);

		String password = null;

		do {
			System.out.println("Enter the password > ");
			password = scanner.nextLine();

		} while (!password.equals(USER_PASSWORD));
		scanner.close();
		System.out.println("Access granted.");

	}
}

 

근데 솔직히 저렇게 작성해 두고 보니 약간 if-else랑 do-while이랑 뭐가 다른지 모르겠음. 

출력물 자체도 크게 차이가 없음. 

,,, 너무 짜증남... 

근데 오늘 이대로 그냥 지나가면 앞으로 많은 난관이 예상되기때문에 어떻게든지 착즙하기 시작

 

그래서 오늘은 강의보단 챗지피티 쪼는 여정을 작성해본다. 

 


 

1. 챗 GPT에게 둘이 구분할 수 있는 연습 예제 내노라고 쪼기

일단 챗지피티에게 불쌍한 척을 하며 공부를 도와달라고 요청한다.

보통은 예제를 먼저 요청한다. 

 

오늘 수업 따라가기 힘들고 재미 없다고 하니 열심히 격려하는 지삐띠

 

import java.util.Scanner;

public class Practice_01 {

	public static void main(String[] args) {
	
		Scanner scanner = new Scanner(System.in);
		final String USER_PASSWORD = "asdf";
		
		String password = null;
		
				do {
			System.out.println("비번을 입력하세요. ");
			password = scanner.nextLine(); 
			
			if(!password.equals(USER_PASSWORD)) {
				System.out.println("Access Denied." );
			} 	
		
		}while (!password.equals(USER_PASSWORD)); 
				System.out.println("Access granted.");	
		
	}

}

 

이렇게 꾸역꾸역 작성하고 

 

import java.util.Scanner;

public class Practice_02 {

	public static void main(String[] arg) {

		final String USER_PASSWORD = "asdfqwer";
		Scanner scanner = new Scanner(System.in);

		String password = "asdf";

		do {
			System.out.println("비밀번호를 입력하세요 > ");
			password = scanner.nextLine();

			if (!password.equals(USER_PASSWORD)) {
				System.out.println("Access DEnied.");
			}

		} while (password.equals(USER_PASSWORD));
		System.out.println("틀렸지롱? ");

	}

}

 

또 작성함. 

챗지피티가 쪼각쪼각 내준것을 따라하면 코드가 실행 거부하고, 

그리고 전체적으로는 do-while 이 (boolean느낌으로다가) 서로 대치되는 statement를 들고 있어야되는듯. 

이를테면, 

do - O

while - X 

이렇게 극명하게 대조되는 값을 가지고 있어야됌. 

do - 틀린 패스워드 처리 명령 

whlie - 틀린 패스워드 처리 명령 

이렇게 (결국) 동일할 수 밖에 없는 모양새로 코드를 입력하면 귀신같이 빨간줄 그으면서 실행 거부한다. 

귀신인가.... 어떻게 아는거지.... ? 

 

여튼 쪼각쪼각 따라하면 틀리고,

다시 전체로 해달라고 하면 못따라 하겠고 결국 나온 코드가 둘 다 비슷하게 생김... 

 

이걸로는 승산이 없다고 판단. 빠른 포긔 ㄱㄱ

 

2. 전체가 이해 안되니, 그 중 하나라도 잡아서 졸라 패기

전체가 이해 안되니 하나씩 하나씩 뜯어본다

코드 하나하나 작성하면서 이거는 이러이러한 명령이야, 이거는 저러저러한 요청이야. 이게 맞음? 이라고 대화하면 지피티도 직관적으로 대답해줘서 자주 이용한다. 

 

 

 

일단 얘는 순서에 아무런 문제가 없음 ㅋㅋㅋㅋ 내가 코드를 잘못썼던 문제

 

 

 

혹은 내가 이해하는게 이러이러한데, 뭐가 문제니? 라고 세세하게 적어주는것도 좋다. 

 

 

날 왕초보로 입력해뒀기 때문에, 이런것들은 친절하게 잘 가르쳐준다. 

아래 코드를 입력하는 이유는 사용자가 입력할 수 있도록 아무 값도 없는 상태로 비밀번호 창을 열어줘야 하기 때문이다. 

String password = null; 

아래 코드도 괜찮다. 빈 칸으로 둘 수 있으면 된다. 

String password =""; 

 

하지만 아래 코드는 안된다 왜냐. space도 String에서는 하나의 문자열로 잡히기 때문임. 

String password =" "; 

 

null이 나오면 늘 동공이 흔들흔들 했었는데, 이번건 한번 이해하게 되어서 다행!

 

 

3. 다시 전체로 돌아와 예제 코드 작성해보기

null도 이해했으니 다시 전체로 돌아와 예제 코드를 분석해본다. 

내가 이해하나? 확인하는거다. 

근데 1번과 같은 상황이 반복.

null을 이해한다고 do-while을 한방에 해결할 수 있는것이 아니었다.

기나긴 초보의 길. 하.

 

초보는 언제 이해해요?

 

 

 

4. 스터디 로그 작성

여기에서 힘빼면 지는거다. 일단 할 만큼 했으니 알아낸 것에 만족하고 로그 먼저 작성하자. 오늘의 주제는 null. null이라도 건졌으니 그거라도 써보자... 하면서 정리시작. 그런데 쓰다보면 질문이 다시 생긴다. 

1. 강의에서는 do-while를 if-else 와 비교를 했다. 

2. do-while의 핵심 개념(?)은 '일단 한번은 돌려본다' 이거다. 

3. if-else도 돌려는 보잖아? 한번은 돌려본다는게 무슨말이야? 코드 쓰고 실행시키면 일단 돌려는 보잖아?!

4. 또 ㅂㄷㅂㄷ 거리며 지피티를 쪼기 시작. 

 

5. 정리된 질문으로 다시 챗지피티 쪼기

로그를 작성하며 든 궁금증을 하나씩 다시 물어본다

한번 코드랑 씨름해보고, 

새로운 개념(null)도 이해해보고, 

하여간 어제의 내가 아니다 이거야!

 

 

 

  • if-else는 조건문(Conditional Statement)
    • 조건이 맞으면 실행
    • 조건이 충족하지 않으면 if는 실행되지 않을 수 있음 
    • 대신 else가 붙어있으면서 if가 실행되지 않으면 else만 실행됨.
  • do-while은 반복문(Loop Statement)
    • 조건에 따라 반복이 가능
    • 반복이 핵심 기능
    • 조건이 맞지 않아도 무조건 do 와 while이 각 1회 씩 실행

 

6. 착즙 하나 더 완성 

곰곰이 생각해보면, 

패스워드 예제로 if-else 부터 하고, 아직 개념이 안잡혀 있는 상태에서 do-while로 패스워드 예제를 만드는것이 이 모든 옘병의 시작이다. 

if-else는 패스워드 연습해보기에는 좋지만, 실제로 패스워드가 진행되는 flow를 진행하기에는 좋은 방법이 아님.

틀렸을 경우, 반복해서 '다시 입력하세요'를 내뱉는 반복문이 패스워드 프로그램에는 바람직 한 것 같다.

 

그리고 플러스로

역시 언어 공부는 문맥과 같이 해야된다. 그렇지 않으면 무쓸모... 

선생님이 작성해주는 코드만 대충 눈으로 따라가서 빨리 끝내버리고싶었지만

그게 불가능하다는사실을 여실히 보여주는 좋은 레슨이었다.

 

 

>> 오늘 공부한 것  <<

  • null
  • if-else VS do-while
  • 프로그래밍 공부 방법론
    • 각 문도 그에 맞는 예제가 있음
    • 예제 의도 파악 중요

 

7. 마치며... 

 

새로운걸 배우며 느끼는 점: 

선생들이란 자고로 밥로스 같은 기질이 있기 때문에

아무리 그들이 친절하며

아무리 우리가 듣고 있는 레벨이 초급레벨이라고 할찌라도

선생님은 고수라는 사실을 기억해야한다.

그들은 한번 설명 했으니 우리가 이해했다고 생각하고 계속 설명하겠지만...

아직도 if문 while문도 구분 못한다 이거다.... ㅠㅠ

 

매번 우리 선생님도

참쉽죠 느낌으로 가고, 

이걸 어차피 내가 다 잘라서 씹고,

소화해야한다는건 알고 있었지만 

또 이런식으로 기출변형이 나오니... 신선하군. 

 

여튼 오늘 하나는 착즙했으니...

다행적 사고를 하며..

20000...

해피코딩...