ID와 PASSWORD 일치여부 앱의 코드 리팩토링

ID와 PASSWORD일치여부 앱의 코드 리팩토링


생활코딩 JAVA를 수강중에 나오는 실습들만 따라하는 게 아니라 더 나아가 응용을 스스로 하고 있다.
그만큼 JAVA의 매력에 푹 빠졌달까…

실습에선 ID와 PASSWORD가 일치하면 로그인되는 결과만 도출하는 APP이었다면 나는 더 나아가 ID만 일치하고 PASSWORD가 다른 경우 PASSWORD를 다시 입력하라는 메세지를 전달하는 APP을 만들고 싶었다.

그래서 내가 처음 짠 코드는 아래와 같다.

초기 코드

조건문을 어떻게 해야하는 지 고민스러웠다.
일단 가장 쉬운 if로만 이루어진 코드를 짰다.
원하는대로 작동하니 정말 뿌듯했다.

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
public class authapp {

public static void main(String[] args) {

String[][] users = {
{"민지", "111"},
{"하지", "222"},
{"뽀니", "333"},
{"라미", "444"}
};
String inputId = args[0];
String inputPass = args[1];

Boolean isRightId = false;
Boolean isRightPass = false;
for(int i=0; i<users.length; i++) {
String[] current = users[i];
if(current[0].equals(inputId)){
isRightId = true;
if(current[1].equals(inputPass)){
isRightPass = true;
break;
}
}
}
System.out.println("Hi,");
if(isRightId && isRightPass) {
System.out.println(args[0] + " Long time No see!");
}else if (isRightId && (!isRightPass)) {
System.out.println(args[0] + " Please check password again");
}else{
System.out.println(args[0] + "Please sign up");
}
}
}

작동해서 뿌듯했지만 프로그래머들 사이에서 들여쓰기가 3번이상된다면 코드를 한번 더 봐라라는 격언이 있다고 들었다.

리팩토링 두번째코드

주석없이도 다른 사람이 알아볼 수 있는 코드를 만들고 싶었다.
위의 코드와 1줄차이이고 두번째코드가 오히려 1줄 더 길다.
하지만 나는 두번째코드가 직관적이라서 더 좋은 느낌이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Boolean isRightId = false;
Boolean isRightPass = false;
for(int i=0; i<users.length; i++) {
String[] current = users[i];
if(current[0].equals(inputId) && current[1].equals(inputPass)) {
isRightId = true;
isRightPass = true;
break;
}else if(current[0].equals(inputId)) {
isRightId = true;
break;
}
}

System.out.println("Hi,");
if(isRightId && isRightPass) {
System.out.println(args[0] + " Long time No see!");
}else if (isRightId && (!isRightPass)) {
System.out.println(args[0] + " Please check password again");
}else{
System.out.println(args[0] + "Please sign up");
}

좋은 코드란 무엇일까?

아직까지 잘 모르겠다.
JAVA를 더 배우고나면 좋은 코드가 무엇인지 감이 확실히 올거라 믿는다.

JAVA 동작 원리

생활코딩JAVA1 : JAVA 동작 원리

모든 공부는 그 원리가 중요하다
원리 즉 기초를 튼튼히 쌓아 올려야 무너지지 않는 건물이 되고 건물주가 될 수 있다<응?

그렇다면 자바는 어떻게 작동할까?

JAVA 동작 원리

  1. 우리는 자바라는 언어를 이용하여 컴퓨터에 우리가 원하는 것을 시킬 수 있다. 이때 컴퓨터는 우리의 언어를 이해하지 못한다.

  2. 이러한 우리의 언어를 컴퓨터가 이해할 수 있도록 컴파일(compile)을 한다.

  3. 컴파일링 후 .class가 생성되고 쉽게 말해 컴퓨터가 이해할 수 있는 언어로 번역된 것이다.

  4. 그리고 실행(Run)을 시키면 우리가 java를 설치하면서 다운로드했던 Java Virtual Machine을 거쳐서

  5. computer는 결과를 도출한다.

변수 기초(정확한 데이터타입)

생활코딩JAVA1 : 변수 기초(정확한 데이터타입)

자바는 변수를 설정할때 꼭 정확한 데이터타입을 적어줘야한다.
숫자 1의 경우에는 Number지만 정확히 말하면 정수(Integer 인티저)에 속한다
따라서 아래 변수a와 같이 int 를 적은 뒤 변수를 적는다.

숫자 1.1의 경우에는 실수(real number)이다.
이를 아래 변수b처럼double로 나타내면 된다

문자열은 그래도 String을 쓰면 된다!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
public static void main(String[] args) {
// Number -> integer ... -2, -1 , 0, 1, 2 ...
int a = 1;
System.out.println(a);

// real number -> double ... -2.0, -1.0, 0, 1.0, 2.0 ...
double b = 1.1;
System.out.println(b);

String c = "Hello World";
System.out.println(c);
}
}

Character VS String, 줄바꿈, 문자열안의 큰따옴표넣기

생활코딩JAVA1 : 자바기초, Character VS String, 줄바꿈, 문자열안의 큰따옴표넣기

1. 자바 기초

아래를 항상 기초로 적어야한다

1
2
3
4
5
public class name { //name은 항상 파일명과 일치해야한다
public static void main(String[] args) {
System.out.println();
}
}

매번 코딩해야하기에 여간 귀찮은 게 아니다
그래서 한가지 tip이 있다

sout 을 누르고 ctrl + space 를 누르면 짜잔! System.out.println()가 자동완성된다

2. Character VS String

몇몇 언어와 다르게 JAVA에서는 큰따옴표" "와 작은따옴표' ' 명백한 차이가 있다.

1
2
System.out.println("Hello World");
//String는 문자열으로 캐릭터들이 모여있는 것을 뜻한다
1
2
3
System.out.println('H'); 
//Character는 문자 한 글자만 나타낼 수 있다
//따라서, System.out.println("H")와 위의 작은따음표('H')는 결과는 같아보일 수 있지만 사실 문자 한글자와 문자열로 나눠지기때문에 근본적으로 다르다.

3. 줄바꿈

new line의 약자로 \n을 해주면 된다

1
System.out.println("Hello \nWorld");

4. 문자열안의 큰따옴표 (escape)

문자열 안에 큰따옴표를 사용하고 싶을 때는 \"\" 를 사용해주면 된다

1
System.out.println("Hello \"World\"");// Hello "World"

이클립스 설치시 오류 해결 : Unable to connect the database server at this time(eclipse)

자바 설치 및 이클립시 설치시 오류 해결


Java를 공부하기 위해선 다양한 방식이 있지만
전통적인 JAVA와 Eclipse를 설치하는 것이 좋다

1단계, Java development kit 다운로드하기

java development kit를 검색하여 최신버전을 다운로드 하면 된다
JDK 다운로드를 클릭하면 된다.

2단계, Eclipse 다운로드하기

Eclipse download를 검색하여 최신버전을 다운로드하면 된다

척척 잘 진행되는 것 같았으나… 문제가 생겼다.

Eclipse의 다운로드 버튼을 누릴때마다 아래 사진처럼 Error창이 뜨는 것이다


Unable to connect the database server at this time(eclipse)

Unable to connect the database server at this time(eclipse)

Unable to connect the database server at this time(eclipse)

죽겠네!

해결하고자 네이버링도하고 영어로 구글링도 했지만 뚜렷한 방법은 보이지 않는 듯 했다.

자바를 공부하고 있는 친구에게 상황을 설명하니 혹시 컴퓨터 user name이 한글이냐고 물어봤다

오브콜스!

그러자 친구가 말하길 user name이 한글이라서 안될수도 있다면서 자기도 그런 케이스라서 결국 노트북을 포맷했다고 한다.

포맷이라니?!?!? 말도 안돼! 이건 꿈이야

포맷은 절대 하기 싫어서 온갖 방법을 써봤다

  1. 제어판 > 계정 > 사용자정보에서 내 Microsoft 계정관리에서 영어로 이름 변경한 뒤 노트북 재부팅 후 크롬브라우저에서 다운로드 시도 => 동일 현상으로 실패
  1. 집안의 다른 컴터에서 exe파일은 usb메모리에 받은 뒤 옮기기 => 동일현상으로 실패
  1. 크롬브라우저가 아니라 익스브라우저로 다운로드 시도 => 성공

정말 Java 공부 시작도 전에 짜증이 화르륵ㅋㅋㅋㅋㅋㅋㅋㅋ
성공했을 때의 그 기쁨의 맛이란?! 참 뿌듯했다.

[잘 다운로드 되고 있는 어여쁜 이클립스의 모습. 초록바가 차오를수록 나의 흥도 차오른다 아싸리~]

3번을 통해 나는 문제를 해결했고 이 점이 나와 같은 빡침을 겪은 사람에게 조금이라도 도움이 되었으면 좋겠다.

1번해결방법에서 컴퓨터 계정이름을 영어로 변경한 뒤 바로 컴퓨터에 반영되지 않았다. 그래서 좌절하고 있었는데 노트북 재부팅하고 5시간정도 지난 후에 변경한 계정이름이 반영되었다. 그 후로 크롬브라우저로 들어가 이클립스 다운로드를 누르니 다운이 잘 된다!

즉 이클립스 다운로드 오류는 내 노트북 계정 이름이 한글이었기때문에 발생했다고 할 수 있다.

결론

혹시나 인터넷 익스플로러에서도 이클립스 다운로드 오류가 난다면, 노트북 계정이름을 영어로 변경 후 5시간 정도 기다린 뒤, 노트북의 계정이름이 영어로 반영된 것을 확인 후에 이클립스 다운로드하자!