sm 기술 블로그
절차지향 (데이터 타입/연산자/비교,Boolean/조건문/논리연산자/반복문/배열) 본문
절차 지향과 객체지향의 차이
- 좋은 글
https://blog.naver.com/wer06099/222665396666
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() : 총 개수를 알려준다.
'Java' 카테고리의 다른 글
객체지향 (예외) (0) | 2022.04.18 |
---|---|
객체지향 (API /접근제어자 /abstract /final /static /interface /다형성) (0) | 2022.04.17 |
객체지향 (유효범위[this] /생성자 /상속[super] /오버로딩 /오버라이딩 /클래스패스 /패키지[import]) (0) | 2022.04.15 |
객체지향(클래스,인스턴스,객체 / 클래스맴버와 인스턴스 맴버) (0) | 2022.04.14 |
절차지향 (메소드/입력과 출력/문자열) (0) | 2022.04.14 |