스프링 공부를 위해 자바를 시작해보려고 한다.
학교 다니면서 자바를 배울 일이 있었지만, 내가 열정적으로 배우지 않았다.
안드로이드 앱 개발도 했는데 자바를 1도 모른다. 프로젝트는 대체 어떻게 한건지 모르겠다??
주말 동안 자료형, 입출력, 반복문, 조건문 까지 한 번 훑어보려 한다.
교재로 사용할 책은 남궁성 님의 "자바의 정석"이다. 남궁씨가 별로 흔한 성씨가 아닐텐데 유명한 사람 중에 많이 보이는 것으로 보면 유전자가 좀 뭐가 있나??
사실 한 가지 프로그래밍 언어를 확실하게 안다면 다른 언어를 새로 배우는 것은 쉽다고 생각한다. 난 전공자니까!!
하지만 내가 객체지향의 개념은 제대로 모르기 때문에 교재를 고르면서 제일 신경 쓴 것이 이 부분을 잘 설명해둔 책을 고르는 것이었다.
인터넷에 검색을 해보니 객체지향이 뭔지 설명이 잘 되어있다고 평이 좋아서 골랐다. 인터넷에서 내 돈 주고 샀다..
글은 전체적으로 C/C++ 이랑 Java가 어떤 차이가 있는지 비교하면서 배우는 형식으로 진행될 거 같다.
Hello, Java
public class Main {
public static void main(String[] args) {
System.out.println("Hello, Java");
}
}
모든 프로그래밍 언어 교재의 첫 스타트는 "Hello World"를 찍는 것으로 시작한다. 나도 일단 "Hello, Java" 먼저 찍고 시작하겠다.
대학 와서 C언어 처음 배울 때 생각나고 새롭다!!
변수
변수의 선언과 초기화
변수는 선언과 초기화는 C++이랑 큰 차이는 없어보인다.
int num = 10; //int형 변수 num을 선언하고 10으로 초기화
int num2;
num2 = num +10; //num2 = 20
변수의 타입
기본형과 참조형
자바의 자료형은 '기본형'과 '참조형'으로 나눌 수 있다.
참조형의 경우 C계열에서 쓰는 포인터와 비슷한 개념 같지만 연산을 할 수 없다는 차이가 있다.
- 기본형 : 실제 값(data)을 저장
- 참조형 : 어떤 값이 저장되어 있는 주소(memory address)를 저장
기본형
분류 | 역할 | 타입 (괄호 안은 byte) |
논리형 | True와 False 를 값으로 가짐 | boolean(1) |
문자형 | 문자를 저장 | char(2) |
정수형 | 정수를 저장 | byte(1), short(2), int(4), long(8) |
실수형 | 실수를 저장 | float(4), double(8) |
- C++ 과 달리 자바는 유니코드 문제체계를 사용하기 때문에 char의 크기가 2byte임
- 정수형에 -128~127의 범위를 가지는 byte가 있음
정도만 알고 넘어가면 될 거 같다.
상수와 리터럴
final int MAX_SPEED = 10; //상수 MAX_SPEED를 선언하고 10으로 초기화
MAX_SPEED = 200; //에러, 상수의 값을 변경하려고 하면 오류가 남
final int MAX_VALUE; //에러, 상수는 선언과 동시에 초기화 해야함
C++에서 const나 전처리문에 #define으로 기호상수를 선언해서 사용하는 것과 비슷한 개념처럼 보인다.
자바에서 상수를 선언하려면 변수의 타입 앞에 'final을 붙여주면 된다.
리터럴은 상수나 변수에 들어가는 값을 의미한다.
위의 예제를 보면 'MAX_SPEED'는 상수가 되고, '10'은 리터럴이 된다.
형식화된 출력 - printf()
int age = 10;
System.out.printf("age : %d", age);
'println()'의 경우 변수의 값을 그대로 출력하기 때문에 출력 형식을 변경할 수 없다.
예를 들어, 소수점 자리를 제한하여 출력하거나, 정수를 16진수나 8진수로 출력할 수 없다는 뜻이다.
이 경우 'printf()'를 사용해야 한다.
지시자의 경우 C++ 이랑 차이가 없어서 넘어가도록 하겠다.
정수형
int age = 25;
//age = 25
System.out.printf("age : %d", age);
//age = [___25], 5자리를 잡아두고 우측 정령
System.out.printf("age : [%5d]", age);
//age = [25___], 5자리를 잡아두고 좌측 정렬
System.out.printf("age : [%-5d]", age);
//age = [00025] , 5자리를 잡아두고 우측 정렬 + 남은 자리는 0으로 채우기
System.out.printf("age : [%05d]", age);
실수형
double pi = 3.14159265359;
//pi = 3.141593 , 소수점 7자리에서 반올림해서 6자리까지 출력
System.out.printf("pi = %f", pi);
//pi = [3.1415926536____] , 14자리의 공간을 잡아두고 10자리까지 출력(11자리에서 반올림)
System.out.printf("pi = [%14.10f]", pi);
//pi = [3.1415926535900_] , 14자리의 공간을 잡아두고 13자리까지 출력(남는 자리는 0으로 채움)
System.out.printf("pi = [%14.13f]", pi);
문자열
String str = "일이삼사오육칠팔구십";
//str = 일이삼사오육칠팔구십
System.out.printf("str = %s" , str);
//str = [_____일이삼사오육칠팔구십] , 15자리를 잡아두고 우측정렬
System.out.printf("str = [%15s]" , str);
//str = [일이삼사오육칠팔구십____] , 15자리를 잡아두고 좌측 정렬
System.out.printf("str = [%-15s]" , str);
//str = [_______일이삼사오육칠팔] , 15자리를 잡아두고 8자리만 좌측정렬
System.out.printf("str = [%15.8s]" , str);
화면에서 입력받기 - Scanner
import java.util.*; //패키지 추가
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); //Scanner클래스 객체 추가
String input = scanner.nextLine(); //input에 문자열 입력 받음
int num = Integer.parseInt(input); //문자열을 정수형으로 변환
System.out.println("입력내용 : " + input); //입력내용 : 22
System.out.println("num : " + num); //num : 22
}
}
입력 하나 받는데 이렇게 뭐가 많냐...
nextLine()메서드를 사용하면 입력을 문자열로 입력받기 때문에 연산을 위해서는 정수형으로 변환을 해줘야한다.
//정수형 입력
int num1 = scanner.nextInt();
//실수형 입력
float num2 = scanner.nextFloat();
하지만 늘 그렇게 하기 귀찮으니 nextInt() 메서드와 nextFloat() 메서드를 이용해주도록 하자.
파이썬에서도 비슷한 게 있었던 거 같다.
// 생각나서 써보는 Python
a = input("문자열로 입력")
b = int(input("문자열로 입력받는 것을 정수로 변환"))
총평
여기까지 자바의 자료형과 입출력 방법에 대해 알아봤다.
C++이랑 많이 다른 게 없어서 수월했던 거 같다.
'✏️Java 공부 > Java의 정석' 카테고리의 다른 글
[Java 공부/Java의 정석] Chapter.06 : 객체지향 프로그래밍 1 - 3 (기본형 매개변수와 참조형 매개변수) (0) | 2022.07.01 |
---|---|
[Java 공부/Java의 정석] Chapter.06 : 객체지향 프로그래밍 1 - 2 (변수와 메서드) (0) | 2022.07.01 |
[Java 공부/Java의 정석] Chapter.06 : 객체지향 프로그래밍 1 - 1 (객체지향언어, 클래스와 객체) (0) | 2022.06.30 |
[Java 공부/ Java의 정석] Chapter 05. 배열 (0) | 2022.01.23 |
[Java 공부/ Java의 정석] Chapter 03. 연산자 & Chapter 04 : 조건문과 반복문 (0) | 2022.01.23 |
댓글