※우선 이 글은 자바가 설치되어 있다는 가정하에 이클립스를 기반으로 작성합니다.
제가 전역을 하고 다시 프로그래밍을 시작했을 당시 정말 아무것도 기억이 안 났습니다. 기껏해야 System.out.print가 출력인 것만 기억나는 정도?? 그 상태로 백준 알고리즘을 풀다 보니 약 100문제를 단계별로 풀면서도 솔직히 말하면 기초 문제인데 막히는 것도 많고 다른 사람들의 해설을 보는 일도 7~80 퍼에 달했습니다. 그래서 복학하기 전 이 시간을 기회로 '아예 처음부터 기초를 잡아가자.'라는 생각을 가지고 시작하는 포스팅입니다. 틀린 점이 있어도 나쁘게 생각 말고 댓글로 알려주시면 감사하겠습니다.
제일 처음 변수를 공부했습니다.
변수란? -> 변하는 수나 변하는 값을 넣는 공간.
변수 타입 : 변수 타입에는 정수형(byte, short, int, long), 실수형(float, double), 문자(char : char형은 ASCII코드를 기반으로 한다.), 문자열(String), 진리 값(boolean)이 있습니다. 같은 형에도 여러 가지의 변수 타입이 존재하는데 이는 포스팅하면서 하나하나 천천히 풀어 나가겠습니다.
변수 선언 : 변수 타입 변수명; -> ex) int a;
변수 초기화 : 변수 타입 변수명 = 값; -> ex) int a = 1;
여기서 중요한 점은 자바에서는 변수 초기화를 하지 않으면 변수를 사용할 수 없습니다.
근데 이와 같이 변하는 수인 변수가 있으면 변하지 않는 값도 존재하지 않을까 이런 생각에 직면하게 됩니다. 그것이 바로 변하지 않고 항상 일정한 값을 지니는 값인 상수라고 합니다.
상수란? -> 변하지 않고 항상 일정한 값을 지니는 값.
상수 선언 : 상수 선언은 final을 이용합니다. -> final int a = 3; -> 변하지 않는 값입니다.
이렇게 변수와 상수의 개념을 알게 되었으니 사칙연산을 해보겠습니다.
사칙연산은 저희가 알고 있는 + : 덧셈, - : 뺄셈, / : 나눗셈, * : 곱셉으로 구성되어있고 추가로 % : 나머지가 있습니다.
코드로 한번 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class Main {
public static void main(String[] args) {
final int a = 20; // 정수형 상수 a = 20
int b = 3; // 정수형 변수 b = 3
//덧셈
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);
}
}
|
cs |
자 이렇게 출력 값이 나옵니다. 근데 여기에서 나눗셈 부분의 출력 값이 이상하지 않나요? 분명히 우리는 예전에 나눗셈을 배울 때 20/3은 6으로 딱 떨어지지 않고 6.xxxxx가 나온다는 사실을 알고 있습니다. 근데 출력 값이 6인 이유는 변수, 상수의 선언 타입이 int이기 때문에 정수 값으로 출력되어 정수부만 출력하고 소수부를 버려버리기 때문입니다.
다음으로는 증감 연산자에 대해서 알아보겠습니다.
증감 연산자는 변수++(or --), ++(or --) 변수로 사용되는데 변수 뒤에 사용될 경우 나중에 증감을 하고 앞에 사용될 경우 먼저 증감을 합니다.
코드로 한번 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Main {
public static void main(String[] args) {
int a = 10;
System.out.println(a++); //즉시 증가가 아닌 다음 식에 증가
System.out.println(a);
System.out.println(++a); //즉시 증가
System.out.println(a--); //즉시 감소가 아닌 다음 식에 감소
System.out.println(a);
System.out.println(--a); //즉시 감소
}
}
|
cs |
위의 출력 값과 같이 a++, a--는 즉시 증감이 이루어지지 않고 다음 식에 이루어지지만 ++a, --a는 즉시 증감이 이루어지는 모습을 볼 수 있습니다.
이번에는 관계 연산자와 논리 연산자입니다.
관계 연산자는 이와 같이 구성됩니다.
== : 같은가?
> : 큰가?
< : 작은가?
논리 연산자는 이와 같이 구성됩니다.
논리곱 -> AND(&&) : 좌항과 우항이 모두 참일 경우 참.
논리합 -> OR(||) : 좌항과 우항 중 둘 중 하나만 참이더라도 참. -> ※좌항이 참이면 우항의 식은 실행되지 않는다.
논리 부정 -> NOT(!) : 값의 반대 값을 출력
코드로 보시겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 5;
System.out.println("a와 b가 같습니까? " + (a == b));
//a와 b는 다르므로 false 출력
System.out.println("a가 b보다 큽니까? " + (a > b));
//a가 b보다 크므로 true 출력
System.out.println("a가 b보다 작습니까? " + (a < b));
//a가 b보다 크므로 false 출력
System.out.println("a와 b가 같고 a가 5보다 큽니까? " + ((a == b) && (a > 5)));
//우항만 참이고 좌항은 거짓이므로 false
System.out.println("a와 b가 같고 a가 5보다 큽니까? " + ((a == b) || (a > 5)));
//우항만 참이고 좌항은 거짓이지만 OR이므로 true
System.out.println("a가 10이 아닙니까? " + !(a == 10));
//a = 10 이므로 false
}
}
|
cs |
다음으로는 3항 연산자와 pow() 함수에 대해서 알아보겠습니다.
3항 연산자는 (조건? 참 : 거짓)으로 구성되어 있습니다. 나중에 설명할 if문이 간단한 조건 코드일 때 사용되곤 합니다.
pow() 함수는 제곱을 뜻하는 power함수입니다. Math.pow(밑, 지수)로 구성됩니다.
코드로 보시겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Main {
public static void main(String[] args) {
int a = 5;
int b = 4;
System.out.println(a>b? "참" : "거짓");
//a>b가 참이므로 true일때 출력되는 좌항이 출력됩니다.
System.out.println(Math.pow(a,b));
//출력 값에 .0이 붙는 이유는 자바는 기본적으로 double형을 반환하기 때문입니다.
}
}
|
cs |
다음으로는 형식 지정자에 대해서 알아보겠습니다.
형식 지정자를 사용할 때 출력은 print나 println이 아닌 format, printf를 이용합니다.
형식 지정자 | 출력 |
%d | 부호 있는 10진수 정수 |
%u | 부호 없는 10진수 정수 |
%o | 부호 없는 8진수 정수 |
%x, %X | 부호 없는 16진수 정수(대문자일 경우 16진수 대문자표현) |
%f | 부동 소수점형 실수 |
%e, %E | 부동 소수점형 지수 |
%g, %G | %f, %e 중 짧은 것 출력 |
%c | 문자 |
%s | 문자열 |
%b | 논리형 |
다음으로는 문자열을 잘라내 주는 substring(시작 위치, 끝나는 위치) 메서드, 주어진 문자열에서 해당 단어를 포함하고 있는지 알아내는 contains(단어) 매서드, 문자열이 같은지 비교하는 equals(비교 문자열) 매서드 + 대·소문자를 무시하고 같은 경우를 비교하는 equalsIgnoreCase(비교 문자열) 매서드를 한번 알아보겠습니다.
코드로 보시겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class SubStringContainsEquals {
public static void main(String[] args) {
String s = "I love Juho";
String name = "Juho";
System.out.println(s.substring(7, 11));
//주어진 문자열에서 7번째에서 11번째를 잘라 출력한다.
System.out.println(s.substring(2));
//2번째부터 문자열 끝까지 출력한다.
System.out.println(s.contains("love"));
//love를 포함하므로 true를 출력한다.
System.out.println(s.contains("like"));
//like를 포함하지 않으므로 false를 출력한다.
System.out.println(name.equals("Juho"));
//대·소문자까지 동일하므로 true를 출력한다.
System.out.println(name.equals("juho"));
//대·소문자가 다르므로 false를 출력한다.
System.out.println(name.equalsIgnoreCase("jUHO"));
//대·소문자가 아예 다르지만 무시하는 매서드이므로 true가 출력된다.
}
}
|
cs |
다음으로는 조건문 if를 알아보겠습니다.
if(첫 번째 조건){출력} else if(n번째 조건){출력} else {위에 조건에 모두 해당하지 않는 경우 출력}으로 구성되어있고 else if 나 else가 꼭 쓰여야 하는 것은 아닙니다. 간단한 예제를 통해 눈에 익혀둡시다.
코드로 보시겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Main {
public static void main(String[] args) {
String name = "Juho";
if(name.equals("jUHO")) {
System.out.println("대·소문자를 바꾸어 입력하세요.");
}//대·소문자가 다르므로 다음 조건문으로 넘어갑니다.
else if(name.equals("Juho")) {
System.out.println("같습니다.");
}//조건이 참이므로 출력합니다.
else {
System.out.println("다시 입력하십시오");
}
}
}
|
cs |
다음으로는 반복문 for에 대해서 알아보겠습니다.
for(변수 선언 및 초기화; 조건식; 증감식)으로 구성되어 조건식을 만족할 때까지 반복합니다.
코드로 보시겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Main {
public static void main(String[] args) {
int n = 5;
for(int i = 0; i < n; i++) {
for(int j = 0 ; j < n ; j++) {
System.out.print("*");
}
System.out.println();
}//가로로 한줄에 별 5개가 채워지면 안에 있는 for문이 종료되고 줄바꿈이 된 뒤에 n이 5가 될때까지 작동하는 코드입니다.
}//이렇게 for문안에 for문이 들어가 있는 형태를 이중for문이라고 합니다.
}
|
cs |
오늘 마지막 이론으로는 사용자로부터 입력값을 제공받는 Scanner에 대해서 알아보겠습니다.
우선 처음에 자바 프로그램에 있는 유틸리티 중에서 scanner 클래스를 호출해주는 import java.util.Scanner;을 작성해줍니다. 그 후 Scanner s(변수 공간 이름) = new Scanner(System.in); 과 같이 선언합니다. System.in은 입력 값을 Scanner에 넘기는 것을 의미합니다. 입력이 끝나면 s(변수 공간).close로 입력을 종료해줍니다. 그다음 변수에 입력값을 넣는 것은 직접 따라 해 보시겠습니다.
코드로 보시겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a = s.nextInt(); //int형으로 입력받는 법.
String b = s.next(); //nextLine()도 사용가능.
double c = s.nextDouble(); //double형으로 입력받는 법.
System.out.println("입력받은 a의 값: " + a);
System.out.println("입력받은 b의 값: " + b);
System.out.println("입력받은 c의 값: " + c);
}
}
|
cs |
주의할 점으로는 입력값을 구분할 때는 공백이나 줄 바꿈으로 구분해 줘야 합니다.
오늘 이론은 끝났습니다. 포스팅하면서도 많은 걸 찾고 배우는 것 같아요. 이걸 보시는 분들에게도 도움이 된 자료였다면 좋겠습니다. 이제 다 같이 예제를 풀어봅시다. 풀이는 다음 포스팅에서 확인하실 수 있습니다.
예제 1) (0 < second < 3600) 범위의 초(second)를 입력받았을 때 몇 분 몇 초인지 출력.
hint : 사칙연산
예제 2) 문자열을 2번 입력받고 첫 번째 입력 문자열에 두 번째 문자열이 포함되어있는지 확인하는 코드.
hint : Scanner, contains(), if 사용
예제 3) 문자열을 2번 입력받고 첫 번째 입력 문자열과 두 번째 문자열이 같은지 확인하는 코드.
hint : equals() 사용
예제 4) 원의 반지름을 입력받았을 때 그 반지름에 해당하는 원의 모양 출력(원의 내부는 *로 채운다.)
hint : 원의 넓이 : 반지름^2 = x^2 + y^2, 이중 for문
예제 5) 2단부터 입력된 수까지 구구단 수행하는 코드
hint : 이중 for문
'자바 공부' 카테고리의 다른 글
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 3일차 예제 풀이 (0) | 2021.01.15 |
---|---|
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 3일차 (클래스(class), 상속(inheritance), 추상(abstract), Final) (0) | 2021.01.15 |
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 2일차 예제 풀이 (0) | 2021.01.15 |
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 2일차 (객체지향, 메소드, 반복, 재귀, 배열, 다차원 배열) (0) | 2021.01.14 |
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 1일차 예제 풀이 (0) | 2021.01.13 |