안녕하세요! 개발자를 목표로 하는 취준생 @kimty입니다.
시험을 보기전 2주정도 시험공부를 하느라 일이 밀려있었습니다. 오늘까지 밀린
일들을 처리하다보니 블로그에 소흘해지고 글도 쓰지 못해 지금에서야 올리게되네요ㅠㅠ
제 팔로우분들이 아침마다 한분 두분씩 사라지는 것을 보고 마음이 정말 아팠습니다ㅠㅠ
잡담은 여기까지로하고 저번시간에 말씀드렸던 변수의 타입변환에 대해 알아보겠습니다!
-누구든지 쉽게 배우는 자바프로그래밍-3[변수선언 및 기본데이터 타입]
https://steemit.com/kr/@kimty/3
일단 들어가기전에 저번시간에 표로 정리되었던 변수들을 하나하나 뜯어보도록 하겠습니다.
네......설명란을보면 무슨말인지 당최 알지 못하겠습니다....
하지만 저 @kimty가 전부 설명해드릴테니 걱정안하셔도 될겁니다!
그럼 맨위에있는 논리값부터 천천히 들어가도록 하겠습니다
데이터타입 boolean 설명에는 참,거짓을 나타내는 값이라고 되어있습니다.
역시 코딩은 실전이죠!
위 그림을 보시면 boolean타입의 변수 a,b,c,d를 만들어봤습니다.
엇? 하지만 변수 a,b와는 다르게 c,d에는 빨간색으로 무엇인가 불길한 빨간 밑줄이 쳐져있습니다.
한번 무시하고 컴파일을 실행해 보도록 하겟습니다!
자 콘솔창의 오류를 하나하나 살펴보면
- type mismatch : cannot convert from int to boolean
- type mismatch : cannot convert from char to boolean
이라고 나와있습니다.
위말을 해석해보자면 변수c에 지정되있는 타입을 int로 변환하고 변수 d에 지정되어있는 타입을 char형태로 변환하라는
내용입니다.
그렇다는건 boolean이라는 데이터타입에 들어올 수 있는 값은 true,false(참,거짓)이라는 논리값밖에 들어오지 못하는 것입니다.
다음은 char 데이터 타입에 대해 알아보겠습니다.
위의 코드를 보면 e변수에 선언된 'a'라는 문자에는 빨간줄이 그어져있지않고 아래 h라는 변수에는 빨간줄이 그어져있습니다. char타입의 변수에는 작은따옴표(' ')기호를 사용해 글자 하나! 를 저장할 수 있습니다. 변수 h처럼 글자를 여러개 지정을 하고싶다면 앞으로 배울 String이라는 클래스 데이터 타입에 지정을 해야 할 것입니다.
다음은 정수값들에 대해 알아보겠습니다.
정수 값들에는 크게 byte, short, int, long으로 나누어져있습니다.
이 정수들의 차이가 무엇이냐? 위의 사진에 각 데이터타입의 첫글자_1 은 최대치이고 데이터타입의 첫글자_2 는 최솟값을 나타내고 있습니다. 만약 저희가 표현하고 싶은 수가 500이라고 가정했을때 사용할수 있는 데이터타입은 byte를 제외한 모든 정수형이 될 수 있겠네요! 이 정수형들은 자신들의 범위 밖의 값이 표현값으로 들어오게되면 저렇게 빼애애액! 하고 빨간줄이 그어지게 됩니다....... 이점 주의하셔서 변수선언을 하면 될것 같습니다!
그렇다면 기본데이터타입의 마지막 실수에 대해 살펴보도록 하겠습니다!
그림에서 보는것처럼 float변수에는 f라는 글자가 숫자의 마지막에 붙어있습니다.
자바에서는 실수형 데이터를 묵시적으로 double로 처리하게 되어있어서 float형태의 실수데이터로 처리하고싶다면 숫자 뒤에 float을 의미하는 f를 넣어야 할것입니다.
자! 그럼 저번시간에 설명이 부족했던 기본 데이터타입을 어느정도 설명을 해보았습니다. 그렇다면! 이제 타입변환에 대해 살펴보겠습니다.
타입변환이란 무엇인가?
타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말합니다. 예를 들어 int타입을 double타입으로 반대로 double타입을 int타입으로 변환하는 것을 말합니다.
그렇다면 int타입을 double타입으로 double타입을 int타입으로 바꾸었을 때 어떠한 일이 벌어지는지 확인해보도록하겟습니다.
위의 코드를 보았을 때 int a 를 double d로 대입을 해보았습니다. 아무런 오류가 나지않고 제대로 변환이 됩니다. 하지만
double b 를 int c로 변환을 했을때 빨간줄이 그어지며 오류가 발생됬다고 소리치고있습니다.
위의 사진과 비교해 보았을 때 달라진점이 있을겁니다. double b라는 변수를 inc c라는 변수로 변환을 할때 (int) b라고 명시적으로 타입을 지정해주었습니다. 이를 캐스팅이라고 하는데 객체지향에 있어서 캐스팅은 정말 객체지향을 잘 표현할수있을 것 같으면서도 객체지향을 파괴하는 객체지향의 꽃이라고 볼 수 있을 겁니다. 그렇다면 아무런 오류도 발생하지 않은 코드를 가지고 실행을 해 보겠습니다.
이렇게 int a 를 double로 바꾸었더니 소수점아랫자리까지 표현이되고 반대로 double b를 int 로 바꾸었더니
소수점아랫숫자의 값들이 손실이 됬습니다.
그렇다면 한번 double형태의 데이터타입을 int로 변환후 다시 double 로 바꾸어 보겠습니다.
네.....돌이킬수 없는 일이 일어나 버렸습니다...
만약 암호화폐 거래소에서 비트코인을 3.XXXXXXX를 전송했는데 거래소 개발자의 실수로 소수점 아랫자리를 제외하고 정수부분만 보내져서 받는 사람에게는 3.00000이 받아지는 일이 일어나 버렸습니다... 이렇듯 타입변환을 할때에는 이 데이터타입에서 다른 데이터 타입으로 변환을 할 경우 손실이 없는지 한번더 확인하고 캐스팅을 하는 것이 중요할 것입니다.
후...일주일만에 포스팅이 되어버렸습니다ㅠㅠ 제 포스팅을 보고 자바공부를 하시는 분들이 있다면 정말 죄송하다는 말밖에 할 수 없을것 같습니다... 앞으로는 자주 포스팅을 하여 여러분들을 찾아 뵙겠습니다ㅠㅠ
지금까지 개발자를 목표로하는 취준생! @Kimty 였습니다!!!
※※
https://steemit.com/kr/@kdj/kr-dev
@kdj님께서 kr-dev에 관련하여 제안을 해 주셨습니다.
kr-dev 에 올렸으면 하는 글은...
개발 관련 지식들
자기가 현재 개발하는 내용
개발 관련 에세이
창작/아이디어/컨텐츠
창업/ 리쿠르팅
이라고 합니다!
kr-dev 커뮤니티가 많이 활성화되었으면 좋겠습니다!
게임 개발을 하고 있는중입니다. 예전에 공부했던 기억이 새록새록 나네요 ㅎㅎ ^^
명시적 타입은 정적 언어의 특징 중 하나입니다.
int a 라고 하면 a 는 integer 만 담을 수 있습니다.
float 를 int 에 넣는 행위는 자살행위입니다. 반대도 자살행위입니다.
가급적 형변환은 하지 않는 것이 좋습니다.
이에 반해 동적 타입 언어도 있습니다.
자바스크립트나 파이선이 동적 타입언어 입니다.
자바스크립트는 var 나 local 을 이용해서 변수를 선언하고, 이 안에 int, float 를 담을지는 나중에 결정될 수 있으며, 바꿀 수도 있습니다.
파이선은 var 이라는 것 자체가 없습니다. 그냥 씁니다.
그렇다고 해서 동적언어에서 하나의 변수에 int 도 담았다가 float 도 담았다가 하는 것은 자살행위입니다.
프로그래머가 관리를 잘 해 주어야 합니다.
명시적 타입 언어는 컴파일 시간에 타입 관련 오류를 잡아주므로 이상한 짓을 하지 못하게 아예 막아버립니다.
동적 타입 언어는 이런 것이 없기에 프로그래머가 마음먹은대로 할 수 있습니다.
중요한 점 나갑니다.
자바에 대해서 계속 포스팅하고계시네요 잘보고있습니다~!
Congratulations @kimty! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of upvotes
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
Congratulations @kimty! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!