오늘은 6일차! 새로운 진도를 많이 나갔다.
거두절미하고 정리해보겠다.
문자열은 "안녕하세요"처럼 연속된 문자를 값으로 가지는 자료형이다.
큰 따옴표 안에 값을 작성한다는 특징이 있다.
다음을 만족하는 문자열 변수를 생성해보세요
변수 이름: greeting
값: Hello
public class Main {
public static void main(String[] args) {
// 문자열 변수
String greeting = "Hello";
// 작은 따옴표는 바로 사용 가능
System.out.println(greeting);
}
}
이렇게 코드를 작성하였고 출력해 본다면
Hello
라고 출력이 되는 것을 확인해 볼 수가 있다.
이건 앞에서도 많이 했던 거라 금방 할 수 있었다.
다음은 문자열의 길이다.
문자열 내에서 문자의 개수를 길이 (Length) 라고 한다.
length 메서드로 문자열의 길이를 구할 수 있다고 한다.
글자의 개수를 세어주는 메서드라고 볼 수 있겠다.
Hello, Java 를 값으로 가지는 문자열 변수를 생성하고 이 문자열의 길이를 구해라.
public class Main {
public static void main(String[] args) {
String greeting = "Hello, Java";
// 띄어쓰기도 포함
System.out.println(greeting.length());
}
}
출력값: 11
greeting 안에 Hello, Java를 입력
그 후 length 메서드를 통해 총 개수를 구했다.
+(더하기 연결자)를 사용해 문자열을 연결할 수 있다.
성과 이름을 따로 변수에 저장한 다음 두 변수를 합쳐서 풀네임(Full Name)을 들어라.
ex) John+doe
public class Main {
public static void main(String[] args) {
// concat (concatenation) : 연결
String firstName = "John";
String lastName = "Doe";
String fullName = firstName + " " + lastName;
System.out.println(fullName);
}
}
출력값: John Doe
성과 이름을 담을 변수를 생성한 뒤 +를 통해 변수를 합쳐보았다.
fullName을 작성할 때 " "를 넣어 성과 이름 사이에 띄어쓰기를 사용해주었다.
다음은 문자열 메서드다

사진에 보다시피 이렇게 많은 메서드들이 존재하는데 하나씩 실습을 통해 알아보도록하겠다.
"foo"를 값으로 가지는 문자열 변수 s를 생성하고 인덱스를 활용해서 각 위치에 어떤 문자가 있는지 확인해라.
public class Main {
public static void main(String[] args) {
// 문자열은 불변(Immutavle)입니다
// 즉 원본 문자열을 바꿀 수 없습니다
String s = "foo";
System.out.println(s.charAt(0));
System.out.println(s.charAt(1));
System.out.println(s.charAt(2));
}
}
이를 그대로 출력해보면?
f
o
o
charAt(번호)는 문자열(String) 안에서 특정 위치(index)에 있는 문자를 꺼내는 메서드이다.
그렇기 때문에 charAt() 메서드를 통해 특정 인덱스에 어떤 문자가 있는지 확인할 수가 있게 된다.
"foo bar baz"를 값으로 가지는 문자열 변수 s를 생성하라.
그 다음 f,b의 위치(인덱스)를 찾아보아라.
public class Main {
public static void main(String[] args) {
String s = "foo bar baz";
System.out.println(s.indexOf('f'));
// 일치하는 문자가 여러개일 때, 첫번째 문자의 인덱스 반환
System.out.println(s.indexOf('b'));
// 문자열을 입력하는 경우
// 문자열의 첫번째 글자의 인덱스를 반환합니다.
System.out.println(s.indexOf("bar"));
}
}
작성 후 출력값은 이렇다
0
4
4
f는 제일 첫번째에 위치해 있으니 0, b는 5번째에 위치해 있으니 4가 나온다.
문자열을 입력하였을 때는 문자열의 첫번째 글자의 인덱스를 반환한다.
그렇기 때문에 3번째도 4가 나온다.
"stop"을 값으로 가지는 문자열 변수 warning을 선언하고 다음과 같이 변환해보라.
public class Main {
public static void main(String[] args) {
String warning = "stop";
// 원본 (warning)은 그대로
System.out.println(warning.toUpperCase());
// System.out.println(warning);
}
}
작성 후 출력해보면
STOP
이라고 출력된다.
toUpperCase을 사용해서 stop을 STOP(대문자)로 변환 후 출력하였다.
주석 처리해둔 warning을 주석 해제 후 출력해보면 stop이라고 출력이 나오는 것을 확인해 볼 수가 있는데 이로인해 원본 글자인 stop은 그대로 유지가 되고 있다라는 것을 알 수 있다.
다음의 세 문자열 변수를 생성하고 서로 비교하라.
s1 = "foo"
s2 = "foo"
s3 = "bar"
public class Main {
public static void main(String[] args) {
String s1 = "foo";
String s2 = "foo";
String s3 = "bar";
// s1과 s2 비교
System.out.println(s1.equals(s2));
// s1과 s3 비교
System.out.println(s1.equals(s3));
}
}
true
false
출력값은 각각 참과 거짓이라고 나온다.
equals를 사용하여 변수를 각각 비교해 보았다.
s1과 s2는 당연히 같은 글자이니 참(true)이 나와주었고
s1과 s3는 각각 "foo", "bar" 로 다르니 거짓(false)가 나와주었다.
다음은 String을 사용하여 비교해보자.
다음의 두 문자열 변수를 생성하고 서로 비교하세요
input = "shhh-123"
password = "shhh-1234"
public class Main {
public static void main(String[] args) {
String input = "shhh-123";
String password = "shhh-1234";
System.out.println(input.equals(password));
}
}
출력값은 false
input의 값과 password의 값이 다르니 출력값은 거짓(false)가 된다.
John Doe를 값으로 가지는 문자열 변수 fullName을 생성하라.
그 다음 fullName으로부터 성과 이름을 각각 추출하라.
예) John Doe -> John, Doe
public class Main {
public static void main(String[] args) {
String fullName = "john Doe";
// {"John", "Doe"}
String[] arr = fullName.split(" ");
String firstName = arr[0];
String lastName = arr[1];
System.out.println(firstName);
System.out.println(lastName);
}
}
split을 사용하여 문자를 잘라보았다.
fullName에 들어있는 john Doe를 split을 사용해 각각 firstName과 lastName으로 나눈 뒤 배열을 사용해 추출 후 출력하였다.
출력값은
john
Doe
이렇게 나오는 것을 확인해 볼 수가 있다.
다음을 값으로 가지는 문자열 변수 data가 있을 때
data = "apple,banana,orange,mango"
split 메서드를 활용해 data로부터 과일 배열을 생성하라.
그리고 인덱스를 활용해 orange에 접근하라.
public class Main {
public static void main(String[] args) {
String data = "apple,banana,orange,mango";
String[] fruits = data.split(",");
System.out.println(fruits[2]);
}
}
출력값은 orange
이번에도 마찬가지로 split을 사용하였다.
data 안에 문자열을 넣고 split을 사용해 , 부분을 잘라주었다.
그 후 인덱스 3번째에 존재하는 orange를 출력해주었다.
다음은 연산자에 대해 배워보았다.
1 + 2 = 3
위와 같은 연산이 있을 때 피연산자는 1,2,3
연산자는 +,= 이라고 한다.
연산자의 종류는 크게 4가지로 볼 수 있다고 한다.
여러개의 연산자가 있을 때 무엇을 먼저 연산할 것인지에 대한 기준이다.
다음은 주요 연산자의 우선 순위를 표현한 표이다.

다음은 숫자를 대상으로 연산을 수행하는 연산자이다.

산술 연산 예제를 통해 직접 실습해보자.
5와 2를 대상으로 더하기, 빼기, 곱하기, 나누기, 나머지 연산을 수행하라.
public class Main {
public static void main(String[] args) {
int a = 5;
int b = 2;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
// 정수형끼리 나눗셈을 하면 소수점이 버려진다.
// 소수점을 보존하고 싶으면 둘 중 최소 하나가 실수형이면 된다.
System.out.println(a / b);
System.out.println(a % b);
}
}
a와 b에 각각 5와 2를 부여해주고 +, -, *, /, %를 통해 값을 추출해보았다.
7
3
10
2
1
출력값은 위와 같이 나온다. 간단한 사칙연산이다.
값이 1인 변수 a,b를 대상으로 전위/후위 증가 연산자를 적용하고 결과를 출력하라.
public class Main {
public static void main(String[] args) {
int a = 1;
int b = 1;
// 반환 시점에는 다름
System.out.printf("a=%d, b=%d\n", ++a, b++);
// 결론적으로 둘 다 2
System.out.printf("a=%d, b=%d\n", a, b);
}
}
위와 같이 a,b에 1이라는 숫자를 부여한 뒤 ++ 이라는 증가 연산자를 통해 값을 출력해보았다.
a=2, b=1
a=2, b=2
출력값은 이렇게 나온다.
++a은 값을 먼저 1 증가시킨 후 사용한다.
그래서 a는 2가 된 상태로 출력된다
반면 b++은 현재 값을 먼저 사용한 뒤 나중에 1을 증가시킨다.
그래서 출력할 때는 1이 나오지만, 출력 후 실제 b의 값은 2가 된다.
다음은 감소연산자를 알아보자.
값이 1인 변수 a, b를 대상으로 전위/후위 감소 연산자를 적용하고 결과를 출력하라.
public class Main {
public static void main(String[] args) {
int a = 1;
int b = 1;
// 반환 시점에 a는 0, b는 1
System.out.printf("a=%d, b=%d\n", --a, b--);
// 결과적으로 둘 다 0
System.out.printf("a=%d, b=%d\n", a, b);
}
}
증가연산자와 같은 원리이다. 다만 더하는 게 아니라 빼는 것일 뿐.
다음은 대입연산자다.
대입연산자는 변수에 값을 대입하는 연산을 수행한다.

변수 a를 생성하고 값으로 1을 할당하라.
그 다음 더하기 대입연산자를 통해 a의 값을 10 증가시켜라.
public class Main {
public static void main(String[] args) {
int a = 1;
a += 10; // a = a + 10
System.out.println(a);
}
}
출력값은 11이다.
a가 가지고 있는 1, 그리고 그 a에 +를 사용해 10을 더해주었다.
그 후 출력하게 된다면 1+10의 값인 11이 나오게 된다.
다음은 비교 연산자다.
두 값을 비교하고 참 또는 거짓(true or false)을 반환한다.

위에 표를 참고하면 된다.
값이 각각 2, 1인 변수 a, b를 대상으로 모든 종류의 비교 연산을 수행하라.
public class Main {
public static void main(String[] args) {
int a = 2;
int b = 1;
// 동등 연산자
System.out.println(a == b);
// 비동등 연산자
System.out.println(a != b);
// gt 연산자 (greater than)
System.out.println(a > b);
// lt 연산자 (less than)
System.out.println(a < b);
// gte 연산자 (greater than or equal)
System.out.println(a >= b);
// lte 연산자 (less than or equal)
System.out.println(a <= b);
}
}
false
true
true
false
true
false
출력값은 위와 같이 나온다.
a는 b와 같지 않으니 == 에서는 false
a와 b의 두 값이 다르면 참이니 !=에서는 true
a가 b보다 큰 값이니 > 에서는 true
b가 a보다 작은 값이니 < 에서는 false
a가 b보다 더 크거나 같으니 >= 에서는 true
b가 a보다 작은 거나 같으니 <= 에서는 false 가 출력된다.
값이 20인 나이(age) 변수를 선언하라.
그리고 이 나이가 성인인지 확인한 결과를 출력하라.
단 성인 기준은 만 18세로 한다.
public class Main {
public static void main(String[] args) {
int age = 20;
System.out.println(age >= 18);
}
}
출력값은 true가 나온다.
값이 20인 변수 age가 비교대상자인 18보다 크거나 같은게 맞으니 출력값은 true가 맞다.
다음은 논리연산자다.
논리 연산을 수행하고 참 또는 거짓(true or false)을 반환한다.

다음의 두 표현식을 대상으로 논리 연산을 수행하라.
표현식 1 : 1 > 0
표현식 2: 1 < 0
public class Main {
public static void main(String[] args) {
System.out.println(1 > 0 && 1 > 2);
// System.out.println(1 > 0 || 1 > 2);
System.out.println(!(1 > 0)); // !1 > 0 = 1을 부정하게 됨
}
}
출력값은 차례대로 false true false가 뜬다.
1이 0보다 크지만 1은 2보다 작기 때문에 뒤가 틀렸다.
그로인해 false가 출력되었다.
1이 0보다 크고 1이 2보다 크다.
그렇기 때문에 true가 출력되었다.
|| 같은 경우엔 앞에만 앞/뒤 둘 중 하나만 맞으면 true를 출력하기 때문에 1 > 2 를 Dead code로 인식한다.
1이 0보다 크다는 맞다. (true)
하지만 !() 같은 경우 결과를 뒤집기 때문에 출력은 false로 나온다.
값이 35인 나이(age) 변수를 생성하라.
그 다음 이 나이가 30대인지 확인하는 코드를 작성하라.
public class Main {
public static void main(String[] args) {
int age = 35;
System.out.println( age >= 30 && age < 40 );
}
}
age(35)는 30보다 크거나 같고 40보다는 작으니 결과값은 true가 나온다.
다음은 선택문에 대해 배워보았다.
조건이 참인 경우 코드를 실행한다.
조건이 거짓인 경우 실행하지 않는다.
if(조건){
조건이 참일 경우 실행할 코드
}
사용자가 나이를 입력하고 만약 나이가 18살 이상이면 "성인입니다"를 출력하는 코드를 작성하라.
public class Main {
public static void main(String[] args) {
int age = 20;
if (age >= 18) {
System.out.println("성인입니다");
}
}
}
age(20)가 18보다 크거나 같을 경우 "성인입니다" 문자가 출력되는 코드를 작성해 보았다.
실행해보았을 때 20이 18보다 크니 출력은 "성인입니다"로 나오는 것을 확인할 수가 있다.
조건이 참인 경우 if 코드를 실행하고 거짓인 경우 else를 실행한다.
if(조건){
조건이 참인 경우 실행할 코드
}else {
조건이 거짓일 경우 실행할 코드
}
만약 나이가 18살 이상이면 "성인입니다", 아니면 "성인이 아닙니다."를 출력하는 코드를 작성하라.
public class Main {
public static void main(String[] args) {
int age = 18;
if (age >= 18) {
// 조건이 참인 경우
System.out.println("성인입니다");
} else{
// 조건이 거짓인 경우
System.out.println("성인이 아닙니다");
}
}
}
만약 age(18)이 18보다 크거나 같은 경우 성인입니다를 출력하고
그렇지 않을 경우에는 성인이 아닙니다를 출력하는 코드를 작성하였다.
age가 18과 같으니 출력결과는 "성인입니다"로 나오는 것을 확인할 수가 있다.
학생 여부에 따라 "할인 적용"(학생) 또는 "할인 불가"(학생X)를 출력하는 코드를 작성하라.
학생 여부를 나타내는 변수는 boolean 타입을 사용하라.
public class Main {
public static void main(String[] args) {
boolean isStudent = true;
if (isStudent) {
System.out.println("할인적용");
} else {
System.out.println("할인불가");
}
}
}
boolean 타입을 활용해 isStudent는 참이라는 값을 부여하였다.
그리고 isStudent일 때는 "할인적용" 이라는 문구가 뜨고
else(그렇지 않을 경우)에는 "할인불가"가 출력되게 작성하였다.
isStudent는 학생이니 (true) 출력값은 "할인적용"이 나오게 된다.
여러개의 조건이 필요할 때 사용한다.
이 경우 조건문에서 가장 먼저 처음이었던 조건의 코드만 실행된다.
else if(조건){
조건이 참인 경우 실행할 코드
}
다음을 만족하는 조건문을 작성하라.
나이가
1. 18세 미만인 경우 "성인이 아닙니다" 출력
2. 18세 이상 30세 미만일 경우 "20대입니다" 출력
3. 30대 이상 40세 미만일 경우 "30대 입니다" 출력
4. 40세 이상인 경우 "해당사항 없음"을 출력
public class Main {
public static void main(String[] args) {
int age = 20;
if (age < 18) {
System.out.println("성인이 아닙니다.");
} else if (age >= 18 && age < 30) {
System.out.println("20대입니다.");
} else if (age >= 30 && age <40) {
System.out.println("30대입니다.");
} else { // 옵션 - 앞에 모든 조건이 거짓인 경우
// 실행할 코드가 필요할 때 추가할 수 있음
System.out.println("해당사항 없음");
}
}
}
else if문을 사용해 코드를 작성해보았다.
출력값은 20대입니다. 가 출력된다.
age 변수의 값은 20이니 18보다 크거나 같고 30보다는 어리다.
그러니 출력값은 20대입니다가 나온다.
만약 age의 값이 30보다 크거나 같고 40보다 작다면 30대입니다. 가 출력된다.
또한 else를 통해 앞에 모든 조건에 충족하는 age 값이 없을 경우 해당사항 없음 이라는 결과값이 출력된다.
다음을 만족하는 조건문을 작성하라.
점수가
1. 90 이상인 경우 A 출력
2. 90 미만 80 이상인 경우 B 출력
3. 80 미만 70 이상인 경우 C 출력
4. 70 미만 60 이상인 경우 D 출력
5. 60 미만 F 출력
public class Main {
public static void main(String[] args) {
int a = 90;
if (a >= 90) {
System.out.println("A");
} else if (a < 90 && a >= 80) {
System.out.println("B");
} else if (a < 80 && a >= 70) {
System.out.println("C");
} else if (a < 70 && a >= 60) {
System.out.println("D");
} else
System.out.println("F");
}
}
결과값은 A가 나온다.
여기서 내가 변수 이름을 a로 지정하였는데 가독성을 위해 score 로 지정하는 게 더 낫다라는 피드백을 들었다.
앞으로는 변수 이름을 좀 더 생각하고 지어야겠다.
다시 돌아와서 코드를 살펴보자.
a의 값은 90이다
a가 90보다 크거나 작을 경우 A를 출력하고
a가 90보다 작고 80보다 높거나 같을 경우 B를 출력한다.
a가 80보다 작고 70보다 높거나 같을 경우 C를 출력하고
또 70보다 작고 60과 높거나 같으면 D를 출력한다.
그 외의 숫자일 경우 F를 출력하는 조건문이 완성되었다.
a는 90과 같으므로 출력값은 A가 나온다.
이렇게 오늘은 문자열, 연산자, 선택문을 배워보았다.
프로그래밍이 단순히 어려운 영어와 기호의 집합이 아니라 컴퓨터에게 조건과 행동을 지시하는 과정이라는 것을이해하게 되었다.
특히 문자열은 문자를 저장하고 다루는 데 사용된다라는 점이 흥미로웠고, 연산자를 통해 숫자를 비교하거나 값을 증가시키는 방식도 배울 수가 있었다.
또한 if문과 else문을 직접 사용해 조건에 따라 다른 결과가 출력되는 것을 직접 작성해보면서 프로그램의 흐름이 어떻게 바뀌는지 이해할 수 있었다.
처음에는 조건식과 논리 연산자가 헷갈렸지만 직접 코드를 수정하고 결과를 확인하며 점점 익숙해졌다.
특히 boolean 타입을 통해 true와 false로 조건을 판단하는 과정이 흥미로웠다.
아직은 어렵고 실수도 많지만, 코드를 하나씩 해석하면서 점차 원리를 이해해가는 과정이 재미있었다.
앞으로 반복문이나 메서드 같은 더 다양한 기능도 배우면서 코딩 실력을 높여가고 싶다.