2023년 3월 8일부터 자바웹 개발자 국기과정이 시작되었다.
오늘 배운내용은 자바의 가장 기초인 변수이다.
가장 기초적인 개념은 연산자이다.
연산자란 프로그래밍 언어에서 값을 계산/처리 하기 위해 사용하는 기호 혹은 단어이며
그대표적인것중 산술연산자가 있다.
산술연산자에는 =, +=, -=, *=, /=, %=이 있다.
숫자끼리 더하면 덧셈을 수행하고, 문자열이 포함되면 이어붙이기(append)를 수행한다.
+ 연산자는 오버로딩 되어있다(하나의 기호가 상황에 따라 다른 작동을 할 수 있다.)
>>오버로딩이란 원래 한 클래스 안에서는 같은 변수를 사용할수 없는 것이 정상이겠지만 특정 조건을 충족하면
같은 이름의 변수를 지정해도 문제없이 작동시킬수 있는 기능을 말한다.
조건) 1. 메서드의 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
3. 반화 타입(return)은 관계없다.
* 연산자는 문자열에 대해서는 작동하지 않는다. (숫자에 대해서만 사용이 가능하다)
그 외 연산자중 가장 유용하게 사용할수 있는 것이 %(나머지)연산자이다.
% 연산자는 대표적으로 n의 배수나 짝수.홀수를 확인하는 등 단위별로 쪼개서 데이터를 추출하는 코드로 유명하다.
int birth = 1105;
int day = birth % 100;
int month = birth / 100;
이렇게 입력을 하였을 시 결과값은 변수 day에 5 이고 month에 11이 들어갈것이며
이 사람이 11월 5일이 생일인걸 구할수 있다.
이 외에도 짝수 홀수를 구하는 식에서는
int a = 13;
int b = 10;
if(a%2 == 0){
System.out.println("짝수입니다.");
else{
System.out.println("홀수입니다");
}
}
이런식으로 a를 2로 나눈 나머지가 0과 같은면 짝수, 다르면 홀수를 나타낼수 있다.
Scanner은 자바에서 입력을 처리하기 위해 사용하는 클래스이다.
보통 Scanner클래스를 사용하기 위해서는 import기능을 사용하여 java.util.Scanner 을 불러와야 작동한다.
이클립스의 경우 바로 불러오는 단축키는 Ctrl+Space이다.
Scanner을 사용하는 가장 기본적인 순서는
String s;
Scanner sc = new Scanner(System.in);
s = sc.nextLine();
이런식으로 시작을 한다.
여기서 nextLine()은 문자를 다음줄로 넘겨주는 역활을 하는데
이 외에도 nextInt(),nextDouble(),next()등 다양한 종류가 있기때문에 상황에 맞게
사용해야한다.
Scanner으로 숫자를 출력할때 가장 중요한 포인트는 시작은 String(문자)로 입력한다음
그 문자를 정수나 원하는 형태로 변환시켜서 사용을 해야한다는 것이다.
예로들어서
Scanner sc = new Scanner(System.in);
이 코드에서
345라고 입력을 하였다고 가정해보자.
그럼 이 345는 문자로 입력이 된 것이기 때문에 이것을 정수로 변환시켜줘야
계산이 가능하다.
int num = Integer.parseInt(sc.nextLine());
이런식으로 변환할수 있다.
위 내용을 해석해보면 sc.nextLine()으로 문자열 345를 불러온다.
그 다음 그 문자열을 Integer(정수).parseInt를 사용하여 정수형태로 변환시킨 후 정수형태 int num에 저장한다.
위 과장은 실수를 구할때도 똑같이
Double.parseIne(nextLine());으로 사용가능하다.
printf는 값을 넣은때 서식인%를 넣어서 원하는 위치에 값을 배치시킬수 있다.
서식의 종류에는
%d : decimal, 정수를 10진수 형태로 표현한다.
%f : floating number, 실수를 표현한다. float 나 double
%c : character, 단일문자를 표현한다. char에서 사용한다
%s : string, 문자열을 표현한다. 주로 String에서 사용한다
위 내용중 꼭 알아야 할 내용이
기본형(primitive type)이다. 기본형에는 논리형,문자형,정수형,실수형이 존재하며
각 타입에 따라 저장할수 있는 용량이 다르기 때문에 꼭 암기해둬야한다.
1byte | 2byte | 4byte | 8byte | |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
boolean는 true와 false만을 표현할수 있기 때문에 1byte만을 저장해도 충분하다.
여기서 조심해야 할 부분이 정수형이다. byte는 -128~ 127까지밖에 표현이 안되기 때문에 잘 사용하지 않는다.
short는 2byte로 -32,768 ~ 32,767까지 저장이 가능하며 int는 -2,147,483,648 ~ 2,147,483,647로 대부분의 사람들은 무난하게 int에 저장해서 사용하는것 같다(long은 정확히 어느 경우에 사용하는지 잘 모르겠다....)
실수형은 float와 double이 있는데 이 둘다 저장가는한 공간이 큰 편이라 상황에 맞게 사용하면 되겠지만 보통 double을 선호하는것 같다.
위 서식의 내용으로 돌아와서 %는 이런식으로 사용한다.
string name = "홍길동"
int score = 79;
System.out.printf("%s의 점수 : %d\n" , name, score);
홍길동의 점수 : 79 이런식으로 출력된다.
이렇게 입력하면 name,score값을 %s와%d에 불러올수 있다.
이것을 조금 더 유용하게 사용하기 위해서는
String res = String.format("%s의 점수 : 7d%" , name, score);
ystem.out.println(res);
이렇게 입력하면 홍길동의 점수 : 79 이런식으로 출력된다.
7d%는 자릿수를 의미하며 7개의 자리의 제일 오른쪽으로 이동하여 출력된다.
String.format함수는 이 외에도 $를 붙힌다던지 원하는 포맷을 따로 지정하는데에도 유용하게 사용된다.
마지막으로 변수를 비교하는 원리에 대해서 설명한다.
만약
Scanner을 이용해 sun이라는 문자를 입력한다고 해보자.
그리고
String s1 = "sun";
String s2 = "sun";
String s3 = new String("sun");
String s4 = sc.nextLine();
이렇게 했을때 다 같은값으로 인식하는가를 확인해보자
1 System.out.println("s1 == s2 : " + (s1 == s2));
2 System.out.println("s1 == s3 : " + (s1 == s3));
3 System.out.println("s1 == s4 : " + (s1 == s4));
이렇게 비교를 했을때 결과는
1번이 true
2번이 false
3번도 flase 가 나왔다.
이유는 같은 값이라도 비교문에서는 같은id값의 데이터를 비교하기 때문이다.
간단히 말하자면 가르키는 객체(물체)가 다르다는 것이다.
s1과 s2는 변수의 이름은 달라도 저장되는 id값은 같기 때문에 그 데이터만을 비교해서 같다고 인식을 한다.
하지만 s3는 new String으로 새로운 id를 생성하였기 때문에 다른 상자에 같은 이름의 물체를 만들어 놨다고 해도
다르다고 출력한다.
s4는 Scanner로 새로운 id를 만들었기때문에 다르다고 출력한다.
위 문제를 해결하기 위해서는 equals함수를 사용해서 정확하게 비교할수 있다.
System.out.println("s1.equals(s2) : " + s1.equals(s2));
System.out.println("s1.equals(s3) : " + s1.equals(s3));
System.out.println("s1.equals(s4) : " + s1.equals(s4));
euqls를 사용하면 저장(참조)된 값을 비교하지 않고, 데이터값의 일치여부만을 비교하기 때문에 정확하게 비교할수 있다.
마지막으로 Scanner를 사용할때에는 데이터누수가 생길 가능성이 있기때문에
마지막줄에 sc.close()를 사용하여 Scanner클래스를 종료해줘야 안전하게 사용할수 있다.
이번에는 학원1일차와 2일차를 모아서 정리해보았다.
앞으로 6개월갈 점점 더 어려워 지겠지만 자바의 정석으로 선행학습을 해 둔것도 있고 선행학습의 상기 목적으로 복습과
코딩테스트내용도 시간날때마다 올려볼 생각이다.
3개월 뒤에는 현재 구상중인 개인 프로젝트를 완성시킬정도의 실력이 되기를 바라며
분발해 보도록하겠다.
'JAVA 공부' 카테고리의 다른 글
자바의 기초 - 객체지향파트 중 생성자(Constructor) (0) | 2023.03.23 |
---|---|
자바의 기초 - loop문 응용, array(배열) (0) | 2023.03.19 |
자바의 기초 - for문 (0) | 2023.03.17 |
자바의 기초 - String(문자열) (0) | 2023.03.15 |
자바 기초 - Operator (4) | 2023.03.13 |