sm 기술 블로그

절차지향 (데이터 타입/연산자/비교,Boolean/조건문/논리연산자/반복문/배열) 본문

Java

절차지향 (데이터 타입/연산자/비교,Boolean/조건문/논리연산자/반복문/배열)

sm_hope 2022. 4. 13. 22:37

절차 지향과 객체지향의 차이

- 좋은 글

https://blog.naver.com/wer06099/222665396666

 

절차지향 VS 객체지향

절차지향 - 순서를 중요시하는 프로그래밍 방식 - 프로젝트 개발을 예로 들자면, 맨 처음 디자인이 만들어 ...

blog.naver.com

 

1) 절차지향 단계

 


데이터 타입

 

1. 정수형

 

데이터 타입 메모리의 크기 표현가능 범위
byte 1 byte -128 ~ 127
short 2 byte -32,768 ~ 32,767
int 4 byte -2,147,483,648 ~ 2,147,483,647
long 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

크기가 클수록 메모리(램) 사용량이 커진다.

int a = 2147483647;
long b = 2147483647;

int와 long은 같은 숫자를 가리키고 있지만 메모리의 사용량은 다르다.

 

int < long

 

2. 실수형

 

데이터 타입 메모리의 크기 표현가능 범위
float 4 byte  
double 8 byte  

크기가 클수록 메모리(램) 사용량이 커진다.

 

3. 문자

 

데이터 타입 메모리의 크기 표현가능 범위
char 2byte 모든 유니코드 문자

 


연산자

 

1. 문자열을 합치는데 사용하는 연산자

 

public class ConactDemo {

	public static void main(String[] args) {
		String firstString = "This is";
		String secondString = " a concateneated string";
		String thirdString = firstString + secondString;
		//두 문자열을 연결하기 위해서 + 연산자를 사용.
		
		System.out.println(thirdString);

		
	}

}

 

2. 단항연산자

 

public class PrePostDemo {

	public static void main(String[] args) {
		int i=3;
		i++;
		System.out.println(i); // 4출력
		++i;
		System.out.println(i); // 5출력
		System.out.println(++i); // 6출력
		System.out.println(i++); // 6출력 (i를 출력하고 1을 더해줌-> 아래는 7이 나올것)
		System.out.println(i); // 7출력 

	}

}

++i : i라고 하는 변수에 1이라는 변수를 더한 값을 i에 치환하여 출력

i++ : 맥락이 끝나고 i에 1을 증가


비교, Boolean(불린)

 

Boolean (True, False)

불린(Boolean)은 참과 거짓을 의미하는 데이터 타입으로 bool이라고도 부른다. 불린 은 정수나 문자와 같이 하나의 데이터 타입인데, 참을 의미하는 true와 거짓을 의미하는 false 두 가지의 값을 가지고 있다. 아래는 비교 연산자들에 대한 설명이다.

 

비교 연산

1. == (비교한 것이 같다)

 

public class EqualDemo {
 
    public static void main(String[] args) {
        System.out.println(1==2);           //false
        System.out.println(1==1);           //true
        System.out.println("one"=="two");   //false
        System.out.println("one"=="one");   //true
    }
 
}

※ = 은 대입 연산자 , ==는 비교 연산자 이므로 둘의 뜻은 정말 다르다.

 

2. != (비교한 것이 다르다)

 

public class NotDemo {
 
    public static void main(String[] args) {
        System.out.println(1!=2);           //true
        System.out.println(1!=1);           //false
        System.out.println("one"!="two");   //true  
        System.out.println("one"!="one");   //false
    }
     
}

 

3. > (비교했을 때 왼쪽이 더 크다)

 

public class GreaterThanDemo {
 
    public static void main(String[] args) {
        System.out.println(10>20);       //false
        System.out.println(10>2);            //true
        System.out.println(10>10);           //false
 
    }
 
}

 

4. .equals (문자열을 비교)

 

public class EqualStringDemo {
 
    public static void main(String[] args) {
        String a = "Hello world";
        String b = new String("Hello world");
        System.out.println(a == b);   // false
        System.out.println(a.equals(b));  //true
    }
 
}

new String 해주는 이유

Hello world는 하나의 위치에 저장된 데이터를 가르키기 때문에  new String을 통해 다른 위치에 데이터를 생성함으로써 두 개의 Hello world를 생성한다.

a == b 일 때 데이터 위치가 다르기때문에 false 이고 a.equals(b) 는 데이터위치가 다르지만 저장된 데이터의 값 Hello world는 같으므로 true이다.


조건문

 

1. if (조건)

 

public class Condition1Demo {
 
    public static void main(String[] args) {
        if(true){
            System.out.println("result : true");
        } //if가 true 이기 때문에 실행 된다. 만약 false이면 화면상에 아무것도 출력되지 않음.
    }
 
}
public class Condition2Demo {
 
    public static void main(String[] args) {
        if (true) {
            System.out.println(1);
            System.out.println(2);
            System.out.println(3);
            System.out.println(4);
        } //true 여서 출력됨. 만약 flase일 경우 출력되지 않음
        System.out.println(5);
    }
 
}
/* true인 경우   1                    false인 경우  5
                 2
                 3
                 4
                 5
*/

 

2. else

 

public class Condition3Demo {
 
    public static void main(String[] args) {
        if (true) {
            System.out.println(1);
        } else {
            System.out.println(2);
        }
 
    }
 
}


/* true 인 경우 : 1 출력  
   flase인 경우 : 2 출력
*/

3. else if (조건)

 

public class ElseDemo {
 
    public static void main(String[] args) {
        if (false) {
            System.out.println(1);
        } else if (true) {
            System.out.println(2);
        } else if (true) {
            System.out.println(3);
        } else {
            System.out.println(4);
        }
 
    }
 
}

// 출력결과 : 2

※ if문이 실행되는 과정에서 처음 true가 발생되면 그 부분을 출력하고 종료됨. 따라서 위 조건은 2가 출력된다

 

 

4. 변수와 비교 연산자 그리고 조건문

 

public class LoginDemo {
    public static void main(String[] args) {
        String id = args[0]; //입력값
        if(id.equals("egoing")){
            System.out.println("right");
        } else {
            System.out.println("wrong");
        }
    }
}

// if문이 true면 right가 출력  false면 wrong이 출력된다.

id에 사용자가 입력한 값을 넣고 if문에서 equals를 통해 맞는지 비교 후 같으면 true 다르면 false.

※입력은 run configuration에서 arguments에 기입하면 된다.

 

 

5. 조건문 중첩

 

public class LoginDemo2 {
    public static void main(String[] args) {
        String id = args[0];
        String password = args[1];
        if (id.equals("egoing")) {
            if (password.equals("111111")) // egoing 조건이 true일 경우 실행됨. 
            { 
                System.out.println("right");
            } else {
                System.out.println("wrong");
            }
 
        } else {
            System.out.println("wrong");
        }
    }
}

if문을 중첩으로 사용할 수도 있겠지만 if가 두 번이 아닌 한 번의 if에 and연산자를 통해 한번의 if로 끝낼 수 있다.

 

 

6. switch (조건)  : if문 대신 사용할 수 있는 조건문

 

public class SwitchDemo {
 
    public static void main(String[] args) {
         
        System.out.println("switch(1)");
        switch(1){
        case 1:
            System.out.println("one");
            break;
        case 2:
            System.out.println("two");
            break;
        case 3:
            System.out.println("three");
            break;
        default:
            System.out.println("default");
            break;
        }
         
        System.out.println("switch(2)");
        switch(2){
        case 1:
            System.out.println("one");
            break;
        case 2:
            System.out.println("two");
            break;
        case 3:
            System.out.println("three");
            break;
        default:
            System.out.println("default");
            break;
        }
         
        System.out.println("switch(3)");
        switch(3){
        case 1:
            System.out.println("one");
            break;
        case 2:
            System.out.println("two");
            break;
        case 3:
            System.out.println("three");
            break;
        default:
            System.out.println("default");
            break;
        }
         
        System.out.println("switch(4)");
        switch(4){
        case 1:
            System.out.println("one");
            break;
        case 2:
            System.out.println("two");
            break;
        case 3:
            System.out.println("three");
            break;
        default:
            System.out.println("default");
            break;
        }
 
    }
 
}
switch(1)
one
switch(2)
two
switch(3)
three
switch(4)
default

break는 스위치 문을 끝내준다.

※ 스위치 문은 byte, short, char, int, enum, String, Character, Byte, Short, Integer의 데이터 타입만 사용 가능하다.

 

스위치 문을 if와 else if를 통해 사용하게 된다면

        int val = 1;
        if(val == 1){
            System.out.println("one");
        } else if(val == 2){
            System.out.println("two");
        } else if(val == 2){
            System.out.println("three");
        }

 

다음과 같은 코드를 swtich 부분에 작성해 주면 된다.


논리 연산자

 

Boolean (and) Boolean 좌항 우항 모두 Ture 일 경우만 Ture

Boolean (or) Boolean 좌항 혹은 우항 중 하나만 True 면 True

 

1. (Boolean)&&(Boolean) - 둘 다 참일 경우만 참

public class LoginDemo3 {
    public static void main(String[] args) {
        String id = args[0];
        String password = args[1];
        if (id.equals("egoing") && password.equals("111111")) {
            System.out.println("right");
        } else {
            System.out.println("wrong");
        }
    }
}

위에 중첩된 if문을 and 연산자를 통해서 다음과 같이 한 줄로 표현할 수 있다.

 

2. (Boolean)||(Boolean) - 둘 중 하나만 참일 경우 참

// 다수의 사용자가 이용하는 경우 (단, 패스워드는 동일하다)

public class LoginDemo4 {
    public static void main(String[] args) {
        String id = args[0];
        String password = args[1];
        if ((id.equals("egoing") || id.equals("k8805") || id.equals("sorialgi"))
                && password.equals("111111")) {
            System.out.println("right");
        } else {
            System.out.println("wrong");
        }
    }
}

egoing 뿐만 아니라 k8805 , sorialgi 중 하나의 아이디를 입력하고 패스워드가 일치하면 right 가 출력된다.

 

3. !(Boolean) - 부정을 의미함

 

!true -> flase      !flase -> true

 

 


반복문

1. while

while(조건){  //(조건) -> 언제까지 반복할 것인가
    반복 실행 영역  // 반복적인 작업을 실행함
}

true동안에 반복한다

public class WhileDemo {
 
    public static void main(String[] args) {
        int i=9;
    	while (i>5) {
            System.out.println("Coding Everybody"+i);
            i--; // i=i-1
        }
 
    }
}
// 출력결과
Coding Everybody9
Coding Everybody8
Coding Everybody7
Coding Everybody6

 

2. for

for(초기화; 종료조건; 반복실행){ 
    반복적으로 실행될 구문
}



/* While 문과 for문 비교

int i = 0 => 초기화
while (i<10) {=> 종료조건

i++ ; => 반복실행
}
*/
public class ForDemo {
 
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println("Coding Everybody " + i);
        }
 
    }
 
}
// 출력결과
Coding Everybody 0
Coding Everybody 1
Coding Everybody 2
Coding Everybody 3
Coding Everybody 4

3. break

반복 작업을 중간에 중단하고 싶을 때 사용한다.

 

4. continue

반복문이 진행되는 도중 그 부분만 실행이 되지 않고 넘어간다.

public class ContinueDemo {
 
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i == 5)
                continue;
            System.out.println("Coding Everybody " + i);
        }
 
    }
 
}
//출력 결과
Coding Everybody 0
Coding Everybody 1
Coding Everybody 2
Coding Everybody 3
Coding Everybody 4
//5는 continue로 인해서 출력이 되지 않음.
Coding Everybody 6
Coding Everybody 7
Coding Everybody 8
Coding Everybody 9

 

5. 반복문의 중첩

public class LoopDepthDemo {
 
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.println(i + "" + j);
            }
        }
 
    }
 
}
// 출력 결과
00 // i=0 j=0
01 // i=0 j=1
02 // i=0 j=2
10 // i=1 j=0
11 // i=1 j=1
12 // i=1 j=2
20 // i=2 j=0
21 // i=2 j=1
22 // i=2 j=2

배열

배열은 연관된 데이터를 모아서 관리하기 위해서 사용하는 데이터 타입이다.

public class GetDemo {
 
    public static void main(String[] args) {
        String[] classGroup = { "최진혁", "최유빈", "한이람", "이고잉" };
        System.out.println(classGroup[0]);
        System.out.println(classGroup[1]);
        System.out.println(classGroup[2]);
        System.out.println(classGroup[3]);
 
    }
 
}
//출력결과
최진혁
최유빈
한이람
이고잉

이것을 객체지향적으로 바꾸면

package org.opentutorials.javatutorials.array;
 
public class LengthDemo {
 
    public static void main(String[] args) {
        String[] classGroup = new String[4]; // 10개다 4를 10으로 적으면 됨. 갯수임
        classGroup[0] = "최진혁";
        System.out.println(classGroup[0]);
        classGroup[1] = "최유빈";
        System.out.println(classGroup[1]);
        classGroup[2] = "한이람";
        System.out.println(classGroup[2]);
        classGroup[3] = "이고잉";
        System.out.println(classGroup[3]);
 
    }
 
}

으로 적을 수 있다.

 

배열과 반복문을 조화하면 

public class DefineDemo {
 
    public static void main(String[] args) {
 
        String[] members = { "최진혁", "최유빈", "한이람" };
        for (int i = 0; i < members.length; i++) { // i값이 0부터 시작해서 멤버의 길이-1 만큼 반복
            String member = members[i];
            System.out.println(member + "이 상담을 받았습니다");
        }
 
    }
 
}

다음과 같이 나타낼 수 있다.

 

실행결과는

최진혁이 상담을 받았습니다 // members[0]
최유빈이 상담을 받았습니다 // members[1]
한이람이 상담을 받았습니다 // members[2]

이다.

 

for-each

public class ForeachDemo {
 
    public static void main(String[] args) {
        String[] members = { "최진혁", "최유빈", "한이람" };
        for (String e : members) {
            System.out.println(e + "이 상담을 받았습니다");
        }
    }
 
}

' : ' 뒤에 따라오는 데이터(members)를 하나씩 꺼내서 e라는 곳에 두고 처리한다. (실수가 적어진다.)

 

배열의 오류

String[] members = { "최진혁", "최유빈", "한이람" };
System.out.println(members[3]);

> members 배열은 0~2까지 밖에 없다.

String[] members = new String[3];
members[0] = "최진혁";
members[1] = "최유빈";
members[2] = "한이람";
members[3] = "이고잉";

> mebers는 3개의 값만 가질 수 있도록 하게 정의함. (배열의 크기를 벗어나려고 할 때 발생함)

 

ArrayList(컬렉션 프레임워크)

List<Integer> numbers = new ArrayList<>();

numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);

 // 특정 인덱스에 값 추가가
System.out.println(numbers);

List<타입> 변수이름 = new ArrayList<>();  가 기본형식이다 <>는 제네릭.

변수이름.add();  로 값을 추가한다.

 

---> 따로 배열의 크기를 지정하지 않아 메모리를 아낄 수 있다는 큰 장점이 있다.

 

---> ArrayList 사용시 문자열에서 사용하는 get(),size(),indexOf(),contains()의 함수를 사용할 수 있다.

 

사용가능한 함수 : get(index) : 해당 index의 값을 알려준다.   size() : 총 개수를 알려준다.

Comments