이것저것 공부기록
[부스트코스] 데이터 타입과 변수 본문
*부스트코스 <쉽게 배우는 자바1> 강의를 통해 학습한 내용+개인적으로 공부한 내용을 바탕으로 작성한 글입니다.
데이터와 연산
우리가 프로그래밍을 하는 이유는 무엇일까?
프로그래밍의 정의는 '컴퓨터에 부여하는 명령을 만드는 작업'이고, 그 궁극적인 목적은 문제 해결이다.
문제 해결을 위해 우리가 원하는 대로 연산할 수 있도록 데이터를 줘야 하고, 이를 컴퓨터가 이해할 수 있도록 프로그래밍 언어로 전달하는 것이다.
그렇다면 컴퓨터가 다룰 수 있는 데이터는 무엇이고, 어떤 종류가 있을까?
컴퓨터는 숫자, 문자, 그림, 영상, 소리 등 매우 다양한 데이터들을 다룰 수 있다.
컴퓨터는 이러한 데이터들을 구분해서 받아들이는데, 그 이유는 데이터마다 수행할 수 있는 연산이 다르기 때문이다.
예를 들어 숫자를 이용한 연산에는 사칙연산과 같은 것이 있고, 문자열을 이용한 연산에는 두 문자열을 이어 붙이거나, 특정 문자열의 유무를 검사하는 것처럼 말이다.
그래서 컴퓨터 과학과 프로그래밍 언어에는 '데이터 타입'이라는 것이 존재한다.
데이터 타입(data type, 자료형)
데이터 타입이라는 단어 그대로, 데이터의 한 속성으로써 현재 다루고 있는 데이터가 어떤 종류의 데이터인지를 의미한다.
숫자(number)
public class Number {
public static void main(String[] args) {
// 연산자(operator)
System.out.println(6+2); // 덧셈, 8
System.out.println(6-2); // 뺄셈, 4
System.out.println(6*2); // 곱셈, 12
System.out.println(6/2); // 나눗셈, 3
}
}
* 이클립스에서는 sysout을 입력한 후 ctrl+space를 치면 System.out.println(); 를 자동으로 입력해준다.
* // 는 자바에서 주석 표시로 쓰인다.
위 코드는 괄호 안의 연산을 수행하여 출력하는 코드이다.
숫자는 다른 기호 없이 평소에 쓰는 그대로 입력하면 된다.
System.out.println(Math.PI); // 3.141592653589793
System.out.println(Math.floor(Math.PI)); // 내림, 3.0
System.out.println(Math.ceil(Math.PI)); // 올림, 4.0
기본적인 사칙연산자 이외에도, 숫자를 연산할 수 있는 도구(클래스)들이 존재한다.
문자열(String)
** String은 클래스이다. (기본 데이터 타입 X, 기본 데이터 타입 - 정수형, 실수형, 문자형, 논리형 )
public class StringApp {
public static void main(String[] args) {
System.out.println("Hello World"); // 문자열(string)
System.out.println('H'); // 문자 -> 한 글자(character)
System.out.println("H"); // 한 글자지만 문자열
// System.out.println('Hello World'); // 오류 발생
// System.out.println("6"+"6") // 66
// System.out.println("6"*"6") // 오류 발생, 문자열 간 * 연산자 사용 불가
}
}
자바에서 문자열은 큰따옴표("") 안에 적는다. (문자열 = 문자의 나열)
주의해야 할 점은 큰따옴표와 작은따옴표의 쓰임이 다르다는 것인데, 작은따옴표를 사용하면 컴퓨터는 이를 문자(character), 한 글자로 받아들인다. 따라서 5행의 "H"처럼 한 개의 문자를 큰따옴표 안에 쓰는 것은 문제가 없지만, 'Hello World'처럼 문자열을 작은따옴표로 감싸서 표현하면 오류가 발생한다.
앞서 데이터를 구분하여 받아들인다고 했다. 작은따옴표로 감싼 '6'은 숫자가 아닌 문자로 인식하기 때문에, '6'+'6'은 12가 아닌 66이 된다. (문자에서 + 연산자는 결합 연산을 수행한다.)
❓ 문자열 입력 시 줄바꿈은 어떻게 할 수 있는가?
한 줄로 Hello World가 아닌,
Hello
World
처럼 출력하고 싶어서 아래와 같이 코드를 작성했다고 하자.
System.out.println("Hello
World");
System.out.println("Hello"
+ "World"); // HelloWorld 출력(개행 안됨)
첫 번째 코드처럼 입력하려고 할 때 자동으로 두 번째처럼 바뀌게 된다.
자바에서는 첫 번째와 같은 형태를 허용하지 않는다는 뜻이다.
그러나 두 번째 코드도 개행이 되지 않은 채 "HelloWorld"가 출력된다.
System.out.println("Hello \nWorld");
// Hello
// World
자바에서는 줄바꿈을 위해 \n이라는 이스케이프 기호를 사용한다. n은 new line을 의미한다.
이스케이프 기호에는 \n(개행) 외에도 \t(탭), \"(큰 따옴표 표시) 등이 있다.
변수
숫자와 문자열을 콘솔에 출력해보면서 데이터 타입에 대해 알아보았다.
간단한 계산이나 출력을 할 때는 앞서 했던 것처럼 해도 그다지 힘들지 않다.
하지만 계산이 복잡해지거나, 예를 들어 코드에서 3이라고 썼던 것들을 모두 10으로 바꿔야 하는 상황이 생긴다면, 하나하나 값을 수정하기란 여간 힘든 일이 아닐 것이다.
그래서 값에 이름을 붙인 변수라는 것을 사용하고, 변수란 값을 저장할 수 있는 공간을 말한다.
앞서 데이터 타입을 숫자와 문자로 나누어서 봤는데, 자바에서 실제로 쓰이는 데이터 타입은 더 세분화되어있다.
숫자는 크게 정수형(int)과 실수형(double)으로 나눌 수 있다.
* int = integer
변수를 선언(=생성)하고 초기화(=저장)하는 방법에는 아래와 같이 두 가지가 있다.
int a; // 정수형 변수 a 선언
a = 1; // a 초기화
int a = 1; // 변수를 선언함과 동시에 초기화
자바에서는 변수를 지정할 때 데이터 타입을 가장 맨 앞에 선언하는데, 이렇게 데이터 타입을 지정하는 이유는 변수의 데이터 타입을 바로바로 판단할 수 있기 때문이다. 쉽게 말하면,
변수를 선언한다 = 변수를 담을 그릇을 준비한다
변수를 초기화한다 = 준비된 그릇 안에 값을 담는다
와 같다. 이때, 그릇을 준비하려면 그 그릇에 뭘 담을 것인지 미리 알아야 하고 그렇기 때문에 데이터 타입을 미리 지정해주어야 하는 것이라고 이해해도 될 것 같다.
// 변수 활용 예시
public class Variable {
public static void main(String[] args) {
int a = 1; // number -> integer(정수형)
System.out.println(a); // 1
double b = 1.1; // real number -> double(실수형)
System.out.println(b); // 1.1
String c = "Hello World"; // 문자열 변수
System.out.println(c); // Hello World
}
}
변수의 효용
이렇게 변수를 만들어 사용함으로써 얻는 이점을 정리하고 넘어가도록 하자.
1. 변수의 재사용
앞서 변수에 대해 얘기할 때 설명했던 것처럼, 어떤 데이터(값)는 한두 번 사용되기도 하지만 수십번, 수백번 이상 사용될 수도 있다. 이런 경우 변수 하나로 여러번 사용된 값을 모두 컨트롤할 수 있으므로 굉장히 편리하다.
2. 코드의 가독성
변수의 이름을 잘 지어놓으면 코드의 의미를 파악하기 한결 수월하다.
내가 나중에 코드를 다시 보거나, 다른 사람들이 내 코드를 볼 때 훨씬 쉽게 읽을 수 있다.
(ex. double VAT = 10.0; → 부가가치세가 10.0%이구나)
데이터 타입의 변환
하나의 타입을 다른 타입으로 바꾸는 것을 타입 변환(type conversion)이라고 한다.
타입 변환에는 묵시적 타입 변환(자동 타입 변환)과 명시적 타입 변환(강제 타입 변환)의 2가지 방식이 있다.
묵시적 타입 변환은 데이터 손실이 없는 경우(또는 데이터 손실을 최소화하는 방향으로)에 자바 컴파일러가 자동으로 실행해주는 타입 변환이며, 명시적 타입 변환은 사용자가 캐스팅을 통해 타입 변환을 강제적으로 수행하는 것을 말한다.
간단한 예제와 함께 살펴보자.
묵시적 타입 변환
// 정수 -> 실수
double a = 1.1;
System.out.println(a); // 1
명시적 타입 변환
// 실수 -> 정수
// int a = 1.1; // 에러 발생, double형 데이터인 1.1은 int형 변수에 들어갈 수 없음(자바에서 허용 X)
double a = 1.1;
int b = (int) a;
System.out.println(b); // 1 (0.1 손실)
// 정수 -> 문자열
String f = Integer.toString(1);
변수와 데이터에 대해 정리해보았다. 다른 언어를 배울 때 이미 다 배웠던 내용이긴 하지만, 나만의 언어로 표현하는 것은 생각보다 많이 어려운 것 같다.
강사님이 오리엔테이션 영상에서 "필수로 알아야 할 것들"에 집중해서 강의를 제작했다고 하셨는데, 그래서인지 강의영상의 길이가 짧고 핵심만 배울 수 있어서 집중하기도 쉽고, 부담이 훨씬 적은 것 같다. 어차피 나중에 혼자 하다 모르는 것은 구글링해서 직접 찾으면 되니까. 그리고 먼저 질문을 던져주시고, 그에 대한 답을 알려주는 방식으로 강의가 진행되어서 기본적인 개념을 이해하기 훨씬 쉬운 것 같다👍
다 함께 배우고 성장하는 부스트코스
부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.
www.boostcourse.org
'부스트코스 서포터즈 3기' 카테고리의 다른 글
[부스트코스] 자바 입력과 출력 (0) | 2021.01.18 |
---|---|
[부스트코스] 프로그램의 의미, IoT 모의 프로그램 만들기, 디버거 (0) | 2021.01.14 |
[부스트코스] 자바의 동작 원리, JVM, 자바의 응용 분야 (0) | 2021.01.10 |
[부스트코스] 자바(JAVA) 프로그래밍이란? + 실습 환경 갖추기 (1) | 2021.01.09 |
[부스트코스] 서포터즈 3기 합격! (0) | 2021.01.09 |