▶︎[JAVA]맛보기 포스팅는 유튜브 '생활코딩'의 JAVA1 수업을 수강하며 기록했다.
변수란? 그 값이 변할 수 있는 문자를 말한다.
java 언어에서는 변수를 정의할 때 변수의 데이터 타입을 명확하게 지정해주어야 한다.
‘이 변수에는 반드시 정수(integer)/실수(double)/문자열(String) 등이 온다’라고 함께 정의해주는 것이다.
a = 1; (X)
int a = 1; (O)
int b = 1.1; (X)
double b = 1.1; (O)
int c = "Hello World"; (X)
String c = "Hello World"; (O)
왜일까? 각 변수마다 어떤 데이터가 들어가 있는지 명시적으로 알 기 위함이다. 내용물을 꺼낼 때마다 어떤 데이터타입인지 헷갈릴 일이 없다. (데이터 타입과 다른 값이 입력될 경우 컴파일이 불가함.)
누군가에게 편지를 보낸다고 생각해보자.
public class Letter {
public static void main(String[] args) {
System.out.println("Hello, baobao ... baobao ... baobao ... bye");
}
}
편지 속 반복되는 이름이 계속 바뀌어야 한다면?
맛보기2에서 문자열 교체(replace) 메소드를 통해 해봤지만, 이번에는 변수를 이용해본다.
public class Letter {
public static void main(String[] args) {
String name = "baobao";
System.out.println("Hello, "+name+" ... "+name+" ... "+name+" ... bye");
}
}
변수의 값 baobao를 다른 이름으로 변경했을 때, 출력되는 전체 내용에서 name 변수로 넣어둔 부분이 전부 변경되는 효과가 있다.
또, 첫번째 코드에서는 편지 내용에서 baobao가 의미하는 바를 알 수 없지만, 두번째 코드에서는 name이라는 변수명을 통해 해당 부분이 이름을 의미한다고 바로 알 수 있다. 코드의 의미를 빠르게 파악할 수 있도록 작성하는 것은 매우 중요하다. 그 수단 중 하나가 변수이기 때문에 좋은 이름을 지어주자!
즉, 변수 선언을 통해
1. 변수가 호출된 모든 부분을 한번에 수정 가능
2. 해당 변수가 의미하는 바를 누구나(미래의 나, 다른사람) 확인 가능
캐스팅(casting): 데이터 타입을 다른 데이터 타입으로 컨버팅 하는 것(형변환)
double b = 1; 에서 잃어버리는 값은 없지만 double형이기 때문에 1.0 으로 출력된다.
int c = 1.1; 에서는 변수가 int형이기 때문에 1.1을 넣으면 손실이 생겨서 컴파일에 오류가 생긴다.
빨간 줄이 표시된 오류부분에 커서를 올리면 오류의 이유와 해결 방법을 몇 가지 제시해준다.

두번째 Change type of 'd' to 'double'을 선택했더니.
double d = 1.1;로 변경되었다.
첫번째 선택지인 Add cast to 'int'는 1.1이라는 값을 int라는 형태로 강제로 바꾸는 코드를 추가하겠다는 의미이다. 클릭하면 int e = (int) 1.1; 이런식으로 값 앞에 (int)가 추가된 것을 알 수 있다.
여기서 e값을 출력해보면 1로 나타난다. 즉, double형의 값을 강제로 int형으로 바꾸면 손실(0.1)이 일어난다.
그렇다면, 1을 String형으로 변환하고 싶을 때는 어떻게 할까? 검색! 검색하는 힘을 기르자.
ex) java int to string casting 검색 > Integer.toString(i) 발견
*문법을 모르더라도 많이 보면서 익숙해지는 것이 언어는 가장 중요하다는 것을 명심!
String f = Integer.toString(1); 라고 작성했을 때, 변수 f를 호출하여 출력되는 1은 더이상 int형이 아닌 String형 인것이다.
자립하기)
자바에서는 데이터타입을 엄격히 통제하기 때문에, 코딩을 하다보면 변수의 값을 다른 데이터타입으로 컨버팅해야 할 일이 생기기 마련이다. 그 때의 키워드가 'Casting'이고, 무엇을 무엇으로 캐스팅하고 싶은지 알면 검색을 통해 알 수 있다.
프로그램(Program): 시간의 순서에 따라 작업들이 진행되는 것
자동화(Automation): 어떠한 일을 하고자 함에 있어 필요한 각각의 작업들이 시간의 순서에 따라 실행되도록 하는 것
프로그래밍(Programming): 순차적으로 반복되는 작업을 기계에게 위임하여 자동화하는 것을 말하며, 작업을 효율적으로 수행하기 위한 작업
그리고 그 도구 중 하나가 java이다.
우리 주변의 물건들을 동작시킬 수 있는 코드를 짰다고 가정해보자.
egoing 깃허브 참조
하고자 하는 일의 순서에 따라 코드를 배치하여 원하는 프로그램을 짤 수 있다.
그런데 프로그램을 만들 때는 처음부터 끝까지 혼자 다 만들지 않는다. 다른 사람들이 만든 부품을 가져와서 결합해서 나의 완제품을 만든다. 나의 완제품은 또 다른 누군가의 프로그램에 부품이 될 수도 있다. -이고잉-

부품을 내 프로그램에 넣기 위해서 가장 간단한 방법 중 하나는 org디렉토리를 프로그래밍 작업 프로젝트로 끌고 오는 것이다. (MacOS: 파인더에서 폴더를 이클립스 프로젝트 폴더로 드래그앤드롭 했다.) -> 패키지가 추가된다.
이제 준비한 부품들을 이용해서 프로그램을 만들어보자.
가장 먼저 해야할 일은 '내가 하려고 하는 일이 무엇인지', '그 일을 하기 위해서 어떤 일이 시간의 순서에 따라 일어나야 하는지'를 정리하는 것이다.
ex) 집 들어가기: 엘리베이터 부르기 - 보안 해제 - 불 켜기
부품을 클래스 안에 불러오기 위해서는 해당 부품 파일이 들어있는 경로를 통해 import 해준다. 소스 파일 최상단에 적는다.
import org.opentutorials.iot.Elevator;
그 이후에는 임포트 해온 코드 파일을 변수로 선언하여 사용할 수 있다.
// Elevator call
Elevator myElevator = new Elevator("JAVA APT 507");
myElevator.callForUp(1);
-> 이때 Elevator은 데이터 타입, myElevator은 변수명, new Elevator("JAVA APT 507")은 값이라고 생각하면 된다. (밑에는 대충 '엘리베이터 타고 올라갈거니까 1층으로 와라'라는 뜻)
파일을 임포트하는 편리한 방법이 하나 더 있는데, 파일명을 바로 적어 호츨하는 것이다.

이처럼 만약 Lighting 파일을 임포트 하고 싶을 때, Light를 적으면 자동으로 추천 목록이 뜬다.
프로젝트 파일 안에 소스 패키지를 가져왔다면 여기서 그 파일을 찾을 수 있다.
더블클릭하면 자동으로 완성되고, 상단에 import문도 자동 생성된다.
String id = "JAVA APT 507";
// Elevator call
Elevator myElevator = new Elevator(id);
myElevator.callForUp(1);
// Security off
Security mySecurity = new Security(id);
mySecurity.off();
// Light on
Lighting hallLamp = new Lighting(id+" / Hall Lamp");
hallLamp.on();
Lighting floorLamp = new Lighting(id+" / floorLamp");
floorLamp.on();
위 코드를 통해 다음과 같은 결과를 자동화 하는 프로그램을 만들 수 있었다.(가상)

코딩이 편해질 수 있는 지름길 중 하나인 '디버거'에 대해 알아보자.
bug: 작성된 코드에서 의도하지 않은 문제
debugging: 버그를 잡는 행위
debugger: 버그를 잡는 도구
여러 개발도구들은 내부적으로 디버거를 가지고 있다.
사용법도 비슷해서 이클립스로 디버거 사용법을 익혀두면 다른 개발도구에서도 디버거를 사용할 수 있을 것이다.
코드에서 어떤 문제가 있거나, 이 코드를 분석하고 싶을 때 디버거를 사용한다.






선생님이 초급자와 중급자의 차이를 설명할때 문제를 파악하는 능력과 도구를 사용하는 능력을 말씀해주셨었다. 디버거를 통해 문제를 더 쉽게 파악할 수 있게 되는 것이다.
느낀 점
자바를 상세히 배우는 수업이 아니라 입문을 돕기위해 가장 필요한 것들만 훑고 넘어가는 내용이라, 수업을 들을 때 더 자세히 이해하고 싶은 부분들이 생긴다. 예시를 들 때 모르는 문법들도 많이 나오기 때문이다.
선생님은 아직 다 이해하려고 하기보다 의학드라마 보듯이 보라고 하신다.(의학용어 몰라도 전체 흐름으로 드라마를 보듯이) 그저 익숙해지려고 노력하고, 혼자 공부할 수 있는 최소한의 지식과 능력을 키우라고 하셨다. 그런데 어려워요 센세ㅠ
더 자세한 공부를 하게되면 아 이게 이런거였구나 하는 날이 오겠지,,?
훌륭한 글 감사드립니다.