[자료구조DataStructure]자료구조와 알고리즘 차이, 배열

자료구조와 알고리즘

  • 자료구조(data structure) : 데이터를 효율적으로 사용하기 틀이다. 이러한 효율성은 시간 복잡도(time complexity)와 공간 복잡도(space complexity) 기준으로 평가된다.
    • 시간 복잡도란, 해당 자료구조의 시간 효율성의 척도이며 작을 수록 좋은 자료구조이다.
    • 공간 복잡도란, 해당 자료구조의 공간 효율성의 척도이며 작을 수록 좋은 자료구조이다.
Read More

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"