※ 본 포스팅은 생활코딩 이고잉님의 강의를 공부한 후 개인적인 학습목적으로 작성하였습니다. 생활코딩에서 더 자세하고 정확한 정보를 얻으시려는 분들은 아래 참고자료를 확인해주세요. ※
이번 시간에는 데이터에 대해서 이야기해볼 겁니다. 컴퓨터를 사용할 때 데이터를 활용한다는 것은 연산을 하는 겁니다. 그것을 하기 위해서는 컴퓨터가 어떤 데이터들을 활용하는지 알아야합니다. 컴퓨터는 정말 많은 종류의 데이터들을 다룰 수 있습니다. 그 중에서 우리에게 가장 익숙한 데이터는 우선 숫자, 문자, 기타 등등이 있습니다. 소리 영상 등등 말이죠. 이렇게 다양한 데이터 타입들이 있고 이런 데이터 타입들을 제어하는 것이 컴퓨터 공학이 하는 일이고, Java가 하는 일입니다. 우리가 데이터 타입을 분류하는 이유는 각각의 데이터 타입마다 특성에 맞는 처리 방법이 존재하기 때문입니다. 예를들어 숫자면 사칙연산부터 미적분까지 컴퓨터는 해줍니다. 문자는 문자의 개수, 어떤 문자를 없에고, 문자를 찾아주고 등이 필요합니다. 이런 작업들을 하기 위해서는 문자의 형태를 잘 정리정도 해주어야 합니다.
데이터 타입
우선 다음과 같이 새로운 프로젝트 폴더와 해당 폴더 안에서 프로젝트 파일을 생성합니다. ⭐ 새로운 프로젝트 만들기 클릭 후 디렉토리를 지정할 때 지근 생성하는 프로젝트와 같은 이름으로 폴더명을 만들어서 그 경로를 지정해주기!
그 다음 다음과 같이 입력해주고, ctrl space를 누르면 자동완성 목록이 보이게 됩니다. 자동완성 목록은 굉장히 자주 사용하기 때문에 꼭 기억해주세요.
이 기능이 동작하지 않을 경우 위와같이 설정해주세요.
이런 식으로 데이터 타입을 확인해 볼 수 있습니다. 오늘 우리는 Java에서 제일 중요한 데이터 타입 두 가지를 배웠습니다. 문자열과 숫자입니다.
숫자와 연산
이렇게 4칙연산도 아주 간단하게 할 수 있는 것을 확인할 수 있습니다. +, -, *, /를 한국어로는 연산자라고 하고 영어로는 operator라고 합니다. Java에는 수많은 기능들이 있습니다. 그래서 이 중에 내가 필요한 기능들을 단위별로 가져가서 사용할 수 있는데, 수학과 관련한 도구들은 Math 라는 캐비넷 안에 들어가 있습니다. Math하고 . 을 찍어보면 다양한 도구들이 나오는 것을 확인할 수 있습니다. eclipse를 사용하면 이런 편리한 기능들을 제공해줍니다.
Math.PI, Math.floor(Math.PI), Math.ceil(Math.PI) 이렇게 간편하게 pi와 pi의 내림한 숫자를 아주 편리하게 확인할 수 있습니다. 숫자 관련된 기본적인 연산자들과 명령들을 알게 되면 Java를 통해서 다양한 수학적인 작업을 처리할 수 있습니다. 계산기만으로는 상상도 할 수 없는 복잡한 수학적인 작업들을 우리는 Java로 해결할 수 있습니다.
문자열의 표현
전에 배웠던 방법으로 class를 바로 생성해봅시다. 다른 언어를 하시다가 Java를 하시는 분들이 헷갈리시는 것이 하나 있습니다. 바로 작은 따옴표인데요. Java에서 작은 따옴표는 특별한 데이터 타입으로 character입니다. 단어 한개를 의미합니다. 주의해야 합니다. 그리고 문자열에서 줄바꿈을 하기 위해서는 엔터를 해서는 작동하지 않습니다. \n 역슬래시 n 이라는 특수한 기호를 붙이면 됩니다. \n 은 new line의 약자입니다. 또한 문자열에서 “ 큰 따옴표를 그대로 쓰기 위해서는 \” 역슬래쉬를 붙여주면 됩니다. 이렇게 역슬래쉬를 활용해서 뒤에 따라오는 문자의 역할을 바꾸어주는 것을 해방시켜준다는 뜻에서 escape라고 합니다.
문자열 다루기
이번 시간에는 문자열과 관련된 여러가지 작업들에 사례를 보여드리겠습니다. StringOperation이라는 클래스를 만들어봅시다. 이제 여러분은 “어? 클래스라는 것은 어떤 프로그램을 의미하나?”로 받아들이셔도 됩니다. 아무튼 “Hello World”라는 글자의 수를 세어야 하는 상황에 처해있다고 생각해봅시다. 우리는 역시나 학습을 위해서 상상을 발휘해야 하는데요. 만약 우리가 세어야 하는 글자의 수가 1억개라고 생각해보세요. 그러면 지금 배우려는 것이 정말 대박이라고 느껴질 겁니다.
.length()를 활용해 봅시다. “Hello World”.length() 를 실행하면 문자열의 길이를 알 수 있습니다. 또한 이메일을 보낼 때 이름을 바꾸어줘야 한다면 다음과 같이 replace를 활용할 수도 있습니다. 그래서 지금 우리가 살펴본 것은 length, replace가 중요한 것이 아니라 문자열 데이터 타입을 표현할 수 있으면 Java에 내장되어 있는 문자를 처리하는 다양한 기능들을 활용해서 문자열과 관련된 문제들을 해결할 수 있다는 가능성을 보여드리기 위한 수업이었습니다.
데이터 변환
이번 수업에서는 캐스팅(casting)이라고 하는 주제를 살펴보겠습니다. 데이터 타입을 다른 데이터 타입으로 변환하는 방법에 대한 내용입니다. 이번 수업의 주제는 어렵고 상당히 혼란스러운 것들이 많기 때문에 한번 쓱 들으면서 이해하려고 너무 노력하지 마시고 지금 시점에서는 그냥 이런게 있다는 정도만 느끼시면 됩니다. 나중에 자바 프로그래밍을 하다 보면 캐스팅으로 인해 생기는 문제가 발생하게 돼 있습니다. 그때 공부하셔도 늦지 않습니다. 그러니까 뭐가 뭔지만 아는 것을 목표로 삼으십시오.
먼저 Casting이라는 이름의 클래스를 만들겠습니다. 그런 다음 위와 같은 코드를 작성했습니다. 여기서 1.1이라는 숫자는 어떤 데이터 타입인가요? 실수입니다. 정확하게는 double 데이터 타입입니다. 그럼 이 값을 변수에 담으려면 a라는 이름의 변수의 데이터 타입이 double이어야 합니다. 그런데 1은 뭔가요? 데이터 타입이 double인가요? 소수점이 없기 때문에 정수입니다. 정확하게는 int입니다. 그런데 정수 값은 double 변수 b에 담으려고 했을 때는 에러가 나지 않습니다. 그리고 나서 화면에 b의 값을 출력해 보면 1.0이 출력됩니다. 즉, 1이라는 정수가 변수 b에 담길 때 변수 b가 double 타입이기 때문에 자동으로 1이 double 타입으로, 다시 말해 실수 1.0으로 변환(casting, 캐스팅) 됩니다. 이처럼 값이 변환되면 잃어버리는 값이 있을 수 있습니다. 여기서 잃어버린다는 말의 의미는 곧 알게 됩니다. 그럼 비슷하지만 다른 사례를 한번 보겠습니다. 1.1은 double 타입입니다. 그런데 이 값을 정수형 변수 c에 담으려고 하면 에러가 발생합니다.
여기서 “Type mismatch: cannot convert from double to int”라는 에러 메시지의 의미는 double 타입의 값을 int 타입의 변수 c에 담으려고 하면 안된다는 뜻입니다. 왜냐하면 double 타입은 보다시피 소수점이 있고, 정수는 소수점이 없기 때문에 두 값의 타입을 자동으로 바꾸면 소수점 이하의 0.1을 잃어버리는 현상이 생길 수 있기 때문입니다. 자, 그럼 이 문제를 해결하는 방법으로 어떤 것이 있는지 알려드리겠습니다.
위의 그림과 같이 빨간색 밑줄 위에 마우스 커서를 올려놓으면 이클립스가 어떤 에러가 발생했는지 알려줍니다. 에러 메시지를 해석하면 다음과 같습니다. double 타입의 실수는 자동으로 int 타입의 정수로 바꾸지 못합니다.(Type mismatch: cannt convert from double to int). 왜냐하면 값 손실이 일어나기 때문이죠. 그럼 여러분이 할 수 있는 조치로 다음 두 가지 중 하나를 선택할 수 있습니다(2 quick fixes available). 그 중에서 두 번째 항목인 “Change type of ‘c’ to ‘double’”을 한번 클릭해 보겠습니다. 즉, c라는 변수는 현재 int 타입의 변수인데 그것을 double 타입의 변수로 바꾸겠다는 뜻입니다. 항목을 클릭하면 코드가 자동으로 바뀝니다.
eclipse가 제공하는 첫 번째 항목인 Add cast to ‘int’도 알아봅시다. 이것이 무슨 뜻이냐면 1.1은 double이잖아요. 저것을 int형태로 강제로 바꾸어 주겠다는 것을 의미합니다. 이 항목을 클릭하면 코드가 다음과 같이 바뀌게 됩니다.
(int)가 추가된 것을 알 수 있습니다. 이렇게 하면 double 데이터 형태인 1.1이 강제로 int 형태인 1로 바뀌게 됩니다. 결과적으로 정수 1이 되는 것을 의미합니다. 실제로 출력을 해보면 1이 출력되는 것을 볼 수 있습니다. 즉, 1.1을 강제로 정수로 바꾸면 소수점 아래 부분이 완전히 사라지기 때문에 값 손실이 일어납니다. 이처럼 값 손실이 일어날 수 있기 때문에 우리가 코드에서 명시적으로 int라고 적기 전까지는 자동으로 값을 변환하지 않는 것입니다. 앞선 예제를 이제 다시 생각해 볼까요? double b = 1;에서 정수 1이 double 타입의 변수 b에 들어갈 수 있었던 것은 값 손실이 없기 때문에 자동으로 변환한 것이라고 할 수 있습니다. double b = 1;은 double b = (double)1; 과 똑같은 것임을 알 수 있습니다. 정수가 double 타입의 변수에 담기는 것은 자동으로 된 것이고, 실수가 int 타입의 변수에 담기는 것은 수동으로, 명시적으로 한 것입니다. 즉, int d = 1.1; 에서 double 타입의 값을 int로 바꾸면 값 손실이 있기 때문에 반드시 명시적으로만 변환해야 합니다. 정말 어렵죠? 그러니까 너무 이해하려고 하지 마십시오. 현재 단계에서는 경제성이 떨어지는 얘기지만 나중에 실제로 프로그래밍을 하다 보면 발생할 수 있는 문제이기 때문에 미리 구경시켜드리는 것뿐입니다. 1이라는 값의 데이터 타입은 정수(integer)입니다. 그런데 1이라는 정수를 문자열로 바꾸고 싶다면 인터넷에서 검색해 보시면 됩니다. 중요한 것은 검색하는 능력을 키우는 겁니다. 검색하는 능력은 이 책으로부터 여러분이 독립하는 가장 중요한 방법입니다. Integer의 toString( ) 메소드와 String의 valueOF( ) 메소드를 사용할 수 있네요.
To convert an integer to a string in Java, you can use the toString() method of the Integer class. Here's an example:
int num = 123;
String str = Integer.toString(num);
In this example, the toString() method converts the integer num to a string str.
Alternatively, you can also use the valueOf() method of the String class:
int num = 123;
String str = String.valueOf(num);
This method also converts the integer num to a string str.
참고자료 및 원본 : 오픈튜토리얼스 생활코딩 (이고잉 님)
- 생활코딩 JAVA 입문 수업 : https://opentutorials.org/course/3930
'[생활코딩] Server > JAVA1(기초)' 카테고리의 다른 글
생활코딩 JAVA 1_변수의 {정의, 효용} (0) | 2023.04.28 |
---|---|
생활코딩 JAVA 1_안드로이드 애플리케이션 만들기 (0) | 2023.04.28 |
생활코딩 JAVA 1_사물을 자바로 제어하기 (0) | 2023.04.27 |
생활코딩 JAVA 1_데스크톱 애플리케이션 만들기 (0) | 2023.04.27 |
생활코딩 JAVA 1_Java의 동작원리 (0) | 2023.04.27 |