1. 데이터 유형 (Data Type)
자바는 데이터 유형에 엄격한 편인 언어인 것 같다.
확실히 파이썬에 비해 컴퓨터 중심적이라는 느낌을 강하게 받았다.
public class Datatype {
public static void main(String[] args) {
System.out.println(6); // 6
System.out.println("six"); // six
System.out.println("6"); // 6
System.out.println("6"+"6"); // 66
System.out.println("6 + 6"); // 6 + 6
System.out.println(6+6); // 12
System.out.println("12345".length()); // 5 (해당문자열의 길이만큼 출력)
}
}
// 프로그래밍언어에서 컴퓨터는 입력된 데이터를 사람처럼 직관적으로 판단할 수 없기 때문에 정의를 해줘야한다.
// 데이터의 타입에 따라 처리되는 방식(연산)이 다르기 떄문에 입력된 데이터의 타입을 규정하는것은 매우 중요하다.
데이터 유형을 정의하는 이유는 명확하다. 데이터의 유형에 따라 처리(연산)하는 방식이 다르기 때문이다.
가령 숫자에서 1+1은 2가 되겠지만, 문자에서 "Hello" + "World"는 Hello World가 되는 식이다.
다른 한편으론 1이라는 데이터가 주어졌을 때
사람이야 맥락을보고 이게 숫자인지, 문자인지를 직관적으로 판단할 수 있겠지만
컴퓨터는 그럴 수 없기 때문에 명시적으로 데이터 유형을 지정해줄 필요가 있다.
가장 많이 사용되는 데이터 유형은 크게 숫자(Number)와 문자열(String)로 나뉜다.
숫자는 다시 실수(real number)와 정수(integer)로 나뉘는데, 각각 Double과 Int로 표현된다.
(파이썬에선 실수를 Float으로 표현한걸로 기억하는데 그 부분이 다른것 같다.)
문자열은 출력시 보통 String으로 큰따옴표(")를 통해 표현되지만
만약 개별 문자 하나(Character)만을 출력할 땐 작은 따옴표(')를 쓴다.
정수 - Int
실수 - Double
문자열 - String (" " 사용)
문자 - Chacter (' ' 사용)
2. 변수 (Variable)
변수는 입력한 데이터의 이름을 지정해주는 것으로, 당연히 변수의 데이터 유형을 정해주게 되어있다.
public class Variable {
public static void main(String[] args) {
//변수(variable) : 입력한 데이터의 이름을 지정. 반드시 데이터유형을 정해줘야 함
int a = 1; // 정수는 int(integer)로 표현
System.out.println(a);
double b = 1.5; // 실수는 double로 표현
System.out.println(b);
String c = "Hello World"; // 문자열 String은 반드시 첫머리에 대문자로 표현
System.out.println(c);
// 변수에 데이터타입을 지정하는 이유 :
// 변수에 지정된 데이터 타입을 인식해야 컴파일할 수 있다.
// 변수로 이뤄진 소스코드가 길고 복잡해지면 데이터타입을 확인하기가 매우 어려워지기 때문.
}
}
변수를 사용하는 이유?
코드가 점점 길어지고 복잡해지는 상황에서 특정 값이나 연산과정이 반복된다면
가독성도 안좋아질 뿐더러, 그걸 일일히 계속 써주는 것은 너무나 비효율적일 것이다.
또는 반복적으로 처리해야 하는 특정 양식에서 이름과 같은 특정 값만 바꿔줘야 할 경우 그 부분만 변수로 만들면 효율적으로 작업할 수가 있다.
public class Letter {
public static void main(String[] args) {
// 변수의 효용성 : 직관적인 변수이름을 사용해야 해당 코드의 의미를 파악하기 쉽다. >> 실무에서 매우 중요!!
String name1 = "minji";
String name2 = "Jjangu";
System.out.println("Hello, "+name1+" and "+name2+" and pilsoo !");
// Hello, minji and Jjangu and pilsoo !
double VAT = 10.0;
System.out.println("The VAT of this product is "+VAT+" %");
// The VAT of this product is 10.0 %
}
}
변수를 사용함에 있어서 특히 중요한 부분은
변수의 이름을 지을 때, 보는 사람이 직관적으로 이해하기 쉽게 지어야 한다는 점이다.
실무에 있어서 본인, 혹은 다른 작업자가 코드를 볼 때 이 내용이 무엇에 대한 것인지를 파악하는게 중요하다.
데이터 타입의 변경(Casting)
캐스팅(Casting)은 데이터의 유형을 임의로 바꾸는 것을 말한다.
예를 들어 정수(int)로 지정된 변수에 실수(double)인 데이터를 넣어야 하거나,
문자열(String)로 지정된 변수에 정수를 넣게된다던가 말이다.
public class Casting {
public static void main(String[] args) {
//데이터 타입 변환(Casting)
double a = 1; // (double) 1이 생략된 형태
System.out.println(a);
// 실수타입인 변수에 정수를 넣어도 정상출력(1.0) >> 정수는 실수에 포함되므로..
// int b = 1.1;
// System.out.println(b);
// 정수타입인 변수에 실수를 넣으면 미스매치 에러가 발생 (소수점 이하의 0.1만큼 소실되기 때문)
//데이터타입 변환 방법
// 1. 변수 타입 변경 : int >> double
double c = 1.1;
System.out.println(c);
// 2. 변수값의 타입 변경 : 1.1 >> (int) 1.1
int d = (int) 1.1;
System.out.println(d);
// double인 1.1을 강제로 int로 바꾸면 소수점 이하의 값(0.1)이 소실되어 int부분(1)만 출력됨
// 정수를 문자열로 변경 (Int to String)
// 출력시 getClass()를 사용하면 데이터 타입을 확인가능
String e = Integer.toString(1);
System.out.println(e);
System.out.println(e.getClass()); // class java.lang.String
// 실수를 문자열로 변경 (Double to String)
String f = Double.toString(1.2);
System.out.println(f);
System.out.println(f.getClass()); // class java.lang.String
}
}
- Double(실수)인 변수에 Int(정수)인 데이터를 넣을 경우 : 정상 출력 (아마도 정수가 실수에 포함되기 때문인 것 같다.)
- Int(정수)인 변수에 Double(실수)인 데이터를 넣을 경우 : 미스매치 에러 발생 (실수의 소수점 이하가 소실되기 때문)
변수에서 데이터 타입을 바꾸는 방법은 크게 2가지가 있다.
1) 변수의 유형을 변경
그냥 변수에 넣을 데이터의 유형에 맞춰서 변수 유형을 바꿔주면 된다.
ex) Int a = 1.1 >> Double a = 1.1
(변수에 넣을 데이터 유형을 그대로 사용할 경우)
2) 변수에 넣을 데이터의 유형을 변경
변수의 유형에 맞춰서, 데이터 앞에 바꾸고자 하는 데이터 유형을 ()형태로 입력해준다.
ex) Int b = 1.1 >> Int b = (Int) 1.1
(변수의 유형을 그대로 사용할 경우)
*주의할 점 : 실수를 정수로 바꾸면 정수로 출력되야 하기 때문에 소수점 이하가 소실된다.
또한 정수, 실수 같은 숫자를 문자열로 바꿀 경우는 현재 데이터유형.toString(데이터값)의 형태를 사용한다.
ex) String c = 1 >> String c = Int.toString(1)
System.out.println(c.getClass());
즉 문자열 타입인 변수에 정수인 1을 넣을 경우 Int.toString(1)을 통해 문자열 타입의 1을 출력할 수 있는데,결과는 똑같은 1로 보이기 때문에 출력시 .getClass()를 사용하여 데이터 유형을 확인할 수가 있다.
'코딩공부 > Java' 카테고리의 다른 글
4. 자바문서 보는법 (API/UI, 패키지/클래스, 인스턴스, 상속) (0) | 2022.10.20 |
---|---|
3. 입력(Input)을 받는 여러 방법들 (swing / parameter) (0) | 2022.10.12 |
1. "Hello World" (.Java와 .class) (0) | 2022.10.07 |