생활코딩 JAVA1 (2)데이터타입과 연산, 숫자와 문자, 클래스, 문자열, 변수, 캐스팅, import, 클래스데이터타입, 디버거, 입력과 출력, IDE없이 컴파일과 실행
=====================
[2]Java 프로그래밍 구성
=====================
1.데이터와 연산
(1)데이터의 종류를 왜 나누고
데이터만 갖고는 의미가 없음, 데이터로 연산을 하고 싶은 것.
▽데이터마다 필요한, 가능한 연산이 따로 있군
(2)어떻게 연산을 하는지
data & operation
컴퓨터는 데이터를 갖고 연산을 하는 기계,
자바와 같은 컴퓨터 프로그래밍 언어를 배워서 사용하는 것은
컴퓨터에게 데이터를 갖고 우리가 원하는 대로 연산을 시킬 수 있게 하는 것.
컴퓨터는 어떤 데이터들을 다룰 수 있는지?
Number숫자, String문자, 기타 등등(영상 소리…)
다양한 데이터 타입들이 있고
이것들을 제어하는 것이 컴퓨터공학이 하는 일, 자바로 할 수 있는 일.
구분하는 이유는 각각의 데이터마다, 데이터의 특성에 맞는 처리방식이 존재
: 숫자면 +, -, /, *, 미적분,…
: 문자면 length(문자의숫자가몇개), substring(뭘없애), search(정보가있는지없는지검색), …
이런게 잘 되기 위해서 데이터의 형식이 잘 정리정돈 할 필요가 있다
▽이렇게 안나누면 섞일때 애매(이거냐저거냐)의 수가 생기잖아
/ 연산도 더 빨라지겠네 불필요없이
/ 자바에선 어떻게 데이터들을 정리정돈하고 있고, 각각의 데이터들마다 어떤 연산 방법들이 존재하는지 알아볼것
==============
2.데이터타입
숫자, 문자 같은 데이터를 코드로 표현하는 방법
sysout 한다음 Ctrl+Space 하면 바로 뜸 왜 sout로 안뜨냐면
숫자를 표현할땐 그냥
6
이라고 함.
문자를 표현하고 싶을 때
“six”
라고 함. 문자열, String
“6”는 String 6임.
프로그래밍에서는 데이터 타입이 있고,
그걸 구분하는 이유는
각각의 데이터 타입에 어울리는, 필요로 하는 연산이 있기 때문에
엄격하게 분리해야함.
//주석
6+6은 12
“6”+“6”은 양옆에 문자열이 있는 + 라서 더하기가 아니라
결합 연산자
라고 하는 문자열을 위한 연산이 사용됨.
*(곱하기)도 문자열이란 데이터타입에선 에러
대신
문자열은 “1111”.length() 이런게 있다
: 이건 문자열의 길이를 알려주는 일종의 연산
-> ▽저기다 바로 . 찍는구나 아하 마찬가진가 보네 불러오는건가보네
컴퓨터를 다루는 스킬을 쌓아간다는 것은 크게 두가지의 흐름을 갖음.
(1)내가 지금 하고 있는 이 시스템에는 어떤 종류의 데이터타입들이 존재하는가를 알아가는
(2)각각의 데이터 타입별로 어떤 연산방법들이 존재하나
->이것들로 컴퓨터로 할 수 있는 것들의 일의 가능성이 폭발적으로 증가한다.
넓게 보면 무한히 많은 데이터 타입이 있지만 압도적으로 중요한 두 개
숫자
와
문자
를 배워봄
=====================
3.숫자와 연산
이클립스 ctrl+f11도 컴파일
operator
= 연산자
= +-*/
이것말고도 더 복잡한 계산 자바로 된다. 다른사람들이 만들어 놓음.
자바는 어마어마하게 기능이 많이 있는데 정리정돈이 안돼있으면 찾기 어렵겠죠
그래서 수학과 관련된 아주 유명하고 자주 사용되는 것들을 그루핑 해놓은 일종의 캐비닛 같은게 있습니다.
그게바로 Math ▽클래스를 캐비닛, 그루핑이라고 설명
: 기능을 그루핑 해놓은 것이라고 알아들으면 되겠네[클래스 인상1]
Math. 찍어보면
Math라고 하는 캐비닛 안에, 그룹 안에 들어있는 수학과 관련된 여러 명령어들이 보여지는걸 볼 수 있다. 이클립스를 써서 가능한 것. 도움말도 보여줌. 이클립스를 안쓰면 하나하나 사용설명서를 보고서 타이핑을 해야함.
Math.PI 앞에다가 다시
Math.floor(Math.PI) 할 수도 있다. floor는 바닥이란 의미로 내림 임.
Math.ceil(Math.PI) : ceil는 천장, 올림
계산기로 할 수 있는걸 자바로 할 수도 있고
계산기로는 못하는 엄청 복잡한 현대수학 그런걸 다른 사람이 만들어놓은 코드를 사용하는걸 통해서 한줄로 할 수도 있어 그런 엄청난 수학적 개념의 사용자가 될 수 있다.
Math의 사용설명서 http://bit.ly/2NkH7J4 : 이걸 사용설명서라고 했군.
=====================
4.문자열의 표현
큰 따옴표와 작은 따옴표의 차이
“String” : 문자가 모여있는 것 = 문자열
자바에서 작은 따옴표는 특수한 데이터 타입
->한 글자를 표현하는 데이터타입. ▽사실 쌍따옴표가 특이한거지 C언어 생각해보면
‘Hello World’ : 이러면 오류남(다른 언어에서는 괜찮은데).
->Character(성격이라는 뜻도 있지만, 문자 라는 뜻도 있다)
-> 캐릭터들이 모여있는 것이 스트링.
지금 단계에서는 작은 따옴표는 의미가 달라지기 때문에 쓰지 마십쇼! 정도로만.
‘H’ : Character
“H” : 이건 써도 됨. String
둘이 다름
------------------------------------------------------------
(1)
“Hello 줄바꾸고 싶어서 여기서 엔터쳐서
World“ 이러면 에러남.(문자열 사이에서 엔터를 치면 오류가 난대)
잘못인식한다고 말함.
“Hello”
+“World”이건 괜찮음.
->그래도 콘솔창에 줄바꿈해서 나오진 않음. 문자열을 더했을 뿐.
“Hello \nWorld” 하면 됨. \n은 new line 의 약자
▽붙여서 써도 되는구나.
(2) \
Hello “World” 하고싶으면? “Hello ”World“” 하면 에러. 문자열의 시작과 끝을 알리는게 “”, 저건맨끝 “”이 남음.
이땐 일반 따옴표라고 알려주게 “Hello \“World\”“라고 쓰면 됨 \뒤 따옴표는 일반 문자열이 됨.
어떤 임무가 있는 문자의 앞에 \를 붙여서 일시적으로 해방시키는걸
escape라고 함.
역슬래시는 제어문자를 하기도, 이스케이프 기호를 하기도.
=====================
6-5.문자열 다루기
클래스라는건 어떤 프로그램을 얘기하는 이 정도.[클래스 인상2]
어떤 경우에 의해 텍스트의 글자를 세야 하는 경우가 생김 - 아 이렇게 느껴야 겠구나 실무적으로
->극단적으로 생각. 10글자 말고 1억글자면 일일이 셀 거냐고,
코딩은 어렵고 복잡한 일이기 때문에 단순한 문제보다 어렵고 복잡한 일을 다룰 때가 많다.
우리가 다루는 일이 복잡하고 거대하다면 코딩 정도는 그렇게 어려운 일이 아니라는 말. 편하려고
코딩하는거야
1억 글자 라고 생각해야 우리가 지금 하는밀이 ‘대박’이란 생각이 들 것.
system.out.println(“Hello World”.length()); // 11
- 글자수, 문자열에 대해서
system.out.println(“Hello, Jisoo…..어쩌고..잘지넀니… Jisoo는 예전부터....bye. ”.replace(“Jisoo”, “Suzy”)); //
- 교체하기, 문자열에 대해서
여러명한테 보내는 메일은 보통 처음엔 일반적인 이름(영희철수홍길동) 아니면 [[name]]]같은걸로 써놓음.
▽보니까 “~~” 이거나 스트링 객체 쓰는거나 똑같은거인가봄 그대로 갖다 쓰는거랑 같은건가봄
그니까 "~~".메소드가 됨
∴ 문자열이라는 데이터 타입을 표현할 수 있게되면 문자열과 관련된 자바에 내장돼 있는 여러 가지 문자열을 처리하는 굉장히 기능이 좋은것들을 이용해서 여러 가지 문제를 해결할 수 있다는 그 가능성을 보여준 수업
누가 엄청 좋은 기능들을 다 해놨다!
=====================
7. 작심삼일 공학
=====================
8-1 변수의 정의
그 값이 변할 수 있는 문자를 변수
자바에선 변수를 만들때 그 변수에 어떤 데이터 타입이 들어갈 수 있는지 명확하게 지정해주셔야 합니다.
integer : 정수,
double : 실수(숫자 데이터는 세부적으로 종류가 나뉘어 있다),
String : 문자열
int a = 1;
double b = 1.1;
왜? 이런 불편한?
길거리에 컵에 담겨있는 물은 믿을수가없어 마실 수 없어 뭐가 들어있을 줄 알고.
자바의 변수는 라벨이 붙어있는 음료수의 용기와 같다. 안심하고 마실 수 있다. 라벨을 붙인거야
자바에선 지정해놓은 그것이 아닌 정보가 들어갈 때 컴파일이 안된다. 됐다면 확신할 수 있다. 꺼낼때마다 이 값이 정수인지 숫자인지 문자인지를 확인하지 않아도된다(길거리 물컵에 들어있는 게 무엇인지 판단을 위해 물의 냄새, 맛 등을 확인 안해봐도 된다)라는 굉장한 편리함을 제공한다.
▽값을 넣을 때 까다로운 것 보다 이게 더 나은가봐. 그렇겠네 컴퓨터 입장에선
=====================
8-2 변수의 효용
(1)변수의 재사용 : 필요마다 재사용하고, 쉽게 수정.
(2)코드의 가독성 : 변수의 이름을 어떻게 정했는 지에 대해 저기에 뭐가 들어가는지 코드를 보는 다른사람들이 추론할 수 있다 --name이라고 하면 이건 이름이구나
코드는
(1)나,
(2)미래의 나,
(3)내가 아닌 다른 사람
이 보는 코드이기 때문에
코드를 봤을 때 코드의 의미를 빨리 파악할 수 있도록 작성하는 것은 정말정말 중요하다
->그 어떤 일보다 중요하대, 그때 사용하는 가장 중요한 수단중의 하나가 변수다! 변수는 값에 이름을 부여하는 것이다, 좋은 이름을 써야한다! 그래야 효율적인 코드를 만들 수 있다.
=====================
8-3 데이터 타입의 변환- casting
데이터 타입을 다른 데이터타입으로 컨버팅하는 것 : 캐스팅
case1)
double b = 1; 을
출력하면 1.0.
1은 정수지만
b라고 하는 저 변수에 담길 때
자동으로 실수인 1.0으로 자동캐스팅됨.(손실이 없어서 가능, 추가는 되는구나)
case2)
int c = 1.1; 로 하면
왜 자동으로 안바꿔주냐?
이클립스가 알려준다 0.1만큼 손실이 일어나기 때문에.
->내가 명시적으로 int라고 하기전까지는 자동으로 해주지 않음. 명시적으로만 형변환을 해야 함.
case3)명시적 코드를 추가하기 int e = (int) 1.1; -> 소수점이 사라지는 손실이 일어남.
case1)의 double b = 1;는 double b = (double) 1; 와 똑같은 것임. 전자는 자동, 후자는 명시적으로 해줌.
case4) 1이라는 정수를 String 으로 바꾸고 싶다?
검색하면 됨. 생활코딩과 책으로부터 독립하는 가장 중요한방법
java int to string casting 으로 검색해보면 8백만개가 나옴.
어느 사이트 가보니까 String f = Integer.toString(1); 이런게 있네
이걸 출력해보면 1이 나왔지만 이건 숫자가 아니라 문자열 이겠구나
*sysout(f.getClass()); 변수가 어떤 데이터타입인지 알려줌
∴무엇을 무엇으로 컨버팅할지 검색할 때 쓰는 키워드가 캐스팅이다.
==============
9-1 프로그래밍이란 무엇인가
프로그램의 어원은 음악회에서 연주할 곡들의 순서를 나타내는 것이었음.
요즘도 그렇게 쓰인다. 컴퓨터에서도 시간순서에 따라 어떤 일이 일어나는 것들을 프로그램이라고 한다.
어떤 일을 하는데 필요한 일들을 시간의 순서에 따라 실행되게 할 수 있다면 자동화를 할 수 있게 됨
프로그램을 쓰는 이유는 자동화된 처리를 하기 위함. 우리는 자동화를 하는 방법을 배우는 것
순차적으로 되는걸 활용해서 사람이 잘 못하는 일을 기계에게 위임해서 자동화할 수 있다.
사람 목숨이 왔다가는 엄청난 일이라면?
1이라는 일이 끝나고 2라는 일이 되는데 1이 언제 끝날지 모르는 일이면?(사람이 계속 쳐다보고 있어야 하는데 프로그램은 안쳐다보고 있어도 되잖아.)
거기에 일이 1억개고, 하루에 수십번씩 실행이 되고, 나말고 수만명의 사람들이 쓴다? 이건 사람이 못해.
=====================
9-2 프로그램 만들기 - IoT 라이브러리 설치하기
위에서 말한 기계에 위임해서 자동화체감하기
프로그램을 만들 때는 자기가 처음부터 끝까지 다 만들지 않는다.
다른 사람이 만든 어떤 부품을 갖고와서 그 부품들을 결합해서 나의 완제품을 만드는 것이고
내가 만든 완제품은 다른사람의 무언가의 부품이 될 수도 있다.
이렇게 어깨동무를 하면서 앞으로 나아가는게 소프트웨어를 만드는 과정에서 필수다. 이걸 벗어날 순 없다.
여러분들은 제가 만든 부품을 여러분들의 프로젝트에 넣는 연습을 해볼 것.
다른 사람이 짠 자바 코드를 내 프로젝트에 포함시키기
여러가지가 있지만 가장 심플한 방법은
디렉토리 전체를 프로젝트 폴더로 복사하는 것
프로젝트에 폴더가 그냥 들어가 있기만 하면 쓸 수가 있나보군
이렇게 패키지 익스플로어에서도 패키지로 나타나 있다
그 다른사람이 만든 부품이 들어있는 폴더를 드래그로 내 프로젝트 폴더로 한뒤 Copy files and folders
이렇게 옮기면 패키지 익스플로러에는 패키지로 들어감.
=====================
9-3. IoT 프로그램 만들기
1.생각을 해야함
-내가 지금 할려고 하는 일이 뭐냐.
-그 일을 하기 위해선 어떤 일이 시간에 순서에 따라 일어나야 하느냐.
의학 드라마에 의학용어 나온다고 드라마 못보는거 아니고 맞춰서 수업을 할 테니 걱정하지마세요.
org.opentutorials.iot.Elevator 라고 길게 써서 불러오려고 했는데
맨 위에 import org.opentutorials.iot.Elevator; 라고 쓰면 그 다음부턴 Elevator라고만 쓰면 된다.
아래 맨 왼쪽단어 Elevator 를 말하는 것.
Elevator myElevator = new Elevator(“JAVA APT 507”);
: “ ” 안에 주소 쓴 이유 : 엘리베이터가 어디있는건지 알아야 거기에 있는 엘리베이터를 제어할 수 있으니
▽생성자나 세터는 초기화 = 세팅 이잖아.
myElevator는 변수
new Elevator(“JAVA APT 507”); 가 자바아파트에 있는 엘리베이터
그럼 Elevator는? 이 변수의 데이터타입.
: 그 클래스를 따로 독립된 하나의 데이터타입으로 볼 수 있군
myElevator라는 변수는 반드시 Elevator라는 데이터타입에 해당되는 데이터만 올 수 있다! ▽int a 처럼
그럼 new Elevator(“JAVA APT 507”);는 Elevator라는 데이터타입.
그 다음 myElevator.하면 여러 가지 추천해주는데 myElevator.callForUp(1);해서 1층으로 보내 라는 명령을 줌.
Security 도 마찬가지로 import주소 하고
Security mySecurity = new Security(“JAVA APT 507”); - 이때도 누구의 시큐리티인지 알려주기위해 “”사이를 채움
mySecurity.off(); *()가 있는건 메소드라고 함, mySecurity.off();
Light또 수입하기 귀찮은데.. -> 사실 Light라고 치고 Ctrl+Space 하면 어디어디에 있는 클래스를 추천해줌.
Lighting hallLamp = new Lighting(“JAVA APT 507 / Hall Lamp”);
hallLamp.on();
Lighting floorLamp = new Lighting(“JAVA APT 507 / floor Lamp”);
floorLamp.on();
이걸 이클립스에서 실행 시켰지만, 스마트폰의 앱이나 스마트와치, 웹 같은 좀더 편리한 플랫폼 위에서 자바로 동작하는 이런 코드를 짜게 된다면 우리의 삶이 훨씬 더 윤택해질 것. -> 많은 일을 자동화시킬 수 있겠구나.
*중복되는게 좀 거슬린대, String id = “JAVA APT 507”; 로 하고 밑에 다 id로 바꿔주기 - 거슬리나봐 숙련되면
=====================
★10.디버거★
자동화의 열쇠가 프로그래밍이라는 걸 잊지 마십쇼!
초급자 - 뭐가 문제인지도 모르는데 도구도 몰라
중급자 - 뭐가 문제인지 알고 게다가 도구도 잘 알아 -> 초급자의 입장을 상상하기 힘듦.
이제 선물을 드릴게요
우리가 짠 코드의 의도하지 않은 문제를 버그라고 함.
버그를 잡는걸 디버깅. 디버깅을 할 때 사용하는 도구를 디버거
줄 번호 왼편에서 더블클릭하면 브레이크포인터가 생김. - 화살표는 지금 프로그램이 거기서 멈춘 상태.
그냥 하던대로 프로그램을 실행할 수도 있고,
디버거를 통해 프로그램을 실행할 수가 있음,
브레이크 포인트를 지정한 상태에서 디버거를 실행하면 브레이크 포인트까지 코드가 실행됨.
다시 브포를 누르면 지울 수 있음.
벌레를 누르고 퍼스펙티브(기능에 적절하게 화면구성을 바꿔주는 테마기능)를 보면
아이콘이 벌레로 바뀜.(또는 그냥 퍼스펙티브에서 벌레모양 눌러도 됨)
Step over를 누르면 다음 줄에 브포가 생성되어 그 지점까지만 코드가 실행.
-> 디버거를 이용하면 프로그램을 한줄한줄 실행 시킬 수 있다.
-> 실행되는 순간에 앱의 변수의 상태를 하나하나 체크할 수 있다.
디버그 관점에서 구간을 실행시키고 싶을 땐 거기까지 더블클릭하면 뭐가 하나 더 생성되고,
플레이버튼(Resume, F8)를 누르면 다음 브레이크 포인트가 나올때까지 실행됨.
없으면 당연히 끝까지 실행.
Step into라는 버튼을 누르면 그 줄의 자세한 실행과정을 볼 수 있음.
그 메소드가 어떻게 생겼는지 볼 수 있음.
메소드에서도 스텝오버로 한줄 한줄 실행 시킬 수 있고
(왼쪽에 Debug탭 보면 우리가 실행하고 있는 파일과 몇 번째 줄을 실행하고 있는가까지도 보여줌.)
돌아가고 싶을땐 Step return
모든걸 끝내고 싶을땐 빨간 버튼 Terminate 를 누르면 디버거가 끝나게 됨.
다시 퍼스펙티브에서 JAVA누르면 코딩할 때 편리한 화면으로 돌아가게 된 것.
완전 대박기능이고 이걸 알게되면 문제파악하기가 훨씬 좋음. 디버거를 사용할 수 있게 된 것 축하드립니다.
===============================================================
[3]Java 프로그래밍 시작하기
=====================
11-1. 입력과 출력
프로그램은 들어오는 정보인 입력을 처리해서 출력을 만들어내는 기계다.
입력값을 어떻게 주나?에 대한 강의
아주 다양한 것들이 입력값이 될 수 있다.
Argument : 프로그램을 실행할 때 텍스트 정보를 주는 것
File : 파일의 내용을 읽어서 그 내용이 입력값이 되는 것.
Network : 웹사이트 정보를 다운받아서, 네트워크를 이용해서 프로그램이 동작한다면 그것도 입력.
Audio : 말을 알아들어서 동작한다면 오디오도.
Program : 다른 프로그램이 실행한 출력결과를 입력받아서 프로그램이 동작한다면 다른 프로그램이 입력의 소스
그것의 결과로서
Monitor : 화면에 출력할수도
File : 파일에 쓸 수도 있고
Audio : 소리를 낼 수도 있고
Program : 다른 프로그램에게 출력할 수도 있고
우리가 주는 입력값에 따라 프로그램이 다르게 동작하는 것을 살펴볼 것.(어떤 아파트를 입력하느냐에 따라)
프로그램을 실행하면 사용자가 텍스트 값을 입력해서 id값을 수정할 수 있으면 얼마나 좋을까(프로그래머가 코드를 고치는게 아니라)
->수단과 방법을 가리지 않고 몸부림치면서 한달동안 검색할 수도 있어야 됨
java popup input text swing(알고있어서 이 swing을 칠 수 있는 것)
그렇게 검색하면
JOptionPane.showInputDialog("Enter a ID"); 을 찾을 수 있는데
JOptionPane 객체의 showInputDialog 메소드를 이용해서 입력 다이어로그 창을 이용해서 id 값을 입력할 것
JOptionPane이라는 기능은 여러분이 기본적으로 Sysout처럼 사용할 수가 없다. 읽어오셔야됨. 마우스 갖다 대보면 import를 해주고
import.javax.swing.JOptionPane;
의미는 import javax의 swing에 속해 있는 JOptionPane;이라는 클래스가 로드됐다는 것.
String id =
JOptionPane.showInputDialog("Enter a ID") 이만큼의 값이 입력한 Text로 바뀐다고 표현함 생코형이
->똑똑하고 범용적으로 쓸수도 있고 코드를 고칠줄 모르는 일반인도 사용할 수 있는 프로그램이 탄생함!
▽그니까 맨처음에 사용자에게 어디아파트세요? 해놓고 입력값을 받으면 이 밑에 코드들의 id들에 적용
DimmingLights moodLamp = new DimmingLights(id+“moodLamp”);
moodLamp.setBright(10);
moodLamp.on();
밝기도 입력 받으려면
String bright = JOptionPane.showInputDialog("Enter a Bright Level");
저기 showInputDialog를 이용해 입력한 정보는 String 데이터로 받아들여짐.
받은 값은 String인데 Double 을 넣어야되면 구글에 java string to double conversion 이렇게 치래
*parse 분석하다 그럼 Double.parseDouble(bright)
=====================
11-2. 입력과 출력 - arguments & parameter
▽그 String[] args 내용임
저런 Dialog같은 인풋값을 주면 다양한 값을 시험해볼때 실행할 때마다 클릭해서 귀찮음 개발자 입장에서
이클립스를 이용해서 실행하는 여러 가지 방법들을 미리 정의해놓을 수 있음.
재생버튼 옆에 누르면 재생했던 목록이 나오고
그 목록들이 Run Configurations(실행 설정) 누르면 자바 앱 리스트에 나온다.
그걸 누르면 메인클래스를 실행한다고 돼있고
입력값을 주고 싶을 땐 Arguments : 띄어쓰기가 있으면 하나씩으로 봐서 작은 따옴표로 묶어주면 하나의 덩어리
->어플라이 하면 실행 설정 저장됨. Name에다간 내가 입력한 정보가 뭔지 적어놓을 수도 있음.
적어놓으면 하나씩 추가가 되는데 실행에 대한 이름일 뿐이래
입력 값이 들어갔으면 어떻게 받는지 배워야 함.
자바에서 프로그램을 실행했을 때 표준적이고 중요한 방식이 arguments라는 것을 받는 방식이다.
저기서 2개의 값을 입력했다.
main(String[] args) 에서 args는 위치가 좀 애매하긴 하지만 얘도 변수다. 이 프로그램을 사용하는 사람과 이 프로그램 사이에 값을 매개해준다고 해서 매개변수 parameter
아까 우리가 입력한 Run configuration에서 입력한 값이 args로(이클립스에서만 이렇다는데) 들어오게 된다
근데 값이 두 개이기 때문에 그냥 문자열로 받을 수가 없어서 String뒤에다가 대괄호를 붙인것임.
String[]는 문자열로만 이루어진 배열이라는 데이터(▽아 생각해보니 이거 배열이네 와..)
중요한 것은 args에 사용자가 입력한 값이 들어올 것이다.
프로그래밍에선 0부터 카운팅하는 습관이 있어서 첫 번째 값은 args[0]이다.
개발을 할 때 이것저것 테스트를 해봐야 할텐데 Run configuration에서 자바파일에 듀플리케이트하면 똑같은게 생기는데 그걸로 arguments를 바꾸고 Name도 똑같이 적용시켜서 Apply하면 목록이 하나 추가가 되고 목록을 선택해서 Run버튼하면 클릭할때마다 세팅한 인자가 실행(▽Run Configurations에 있는 설정이 저장이 되나보군)
재생버튼의 Organize Favorites로 자주 사용하는 프로그램들을 목록에 추가할 수가 있다.
네이버설명 : 지난번엔 다이어로그 창을 통해 입력값을 받았는데 이번엔 main 메소드의 agrs 파라미터 로
작은 따옴표로 동작하지 않는다면 큰 따옴표로
=====================
12-1 이클립스없이 컴파일
자바가 동작하는 흐름을 음미하는데 수업의 의미가, 미래에 언젠가 이걸 분명히 해야하는 순간이 온다
Complie : java->class
Run : class를 실행
Input : 실행할 때 입력값을 주는 것, 입력값에 따라 다르게 동작하는 출력값을 만드는법
- import한게 있으면 그걸 로딩해야지만 실행할 수 있다.(이클립스 없이)
- 실행할 때 어떻게 입력값을 받을 수 있는가(이클립스 없이)
=====================
12-2 이클립스없이 컴파일 - 실행환경
의미, 순서들을 이해하는게 핵심
운영체제별로 구체적으로 어떻게 하는지는 나중에 검색하든지 누구한테 질문하든지 강의다시봐
자바를 컴파일 하기 위해선 명령어로 컴파일을 해야함.
컴퓨터를 제어할 수 있는 명령어를 실행하는 프로그램을 띄워야.
윈도우키 + R, cmd 치고 엔터. 이 프로그램으로 컴퓨터한테 명령을 내려서 컴파일 하는 것.
javac라는 것을 통해 컴파일을 할 수 있다.
javac 입력하면 사용법나옴.
javac로 컴파일하고
java로 실행한다
얘넨 Program Files가보면
Java,
JDK, Java SE Development Kits의 약자.
가면 bin, (binary, 보통 실행파일을 칭함)
이라는 디렉토리를 잘 찾아보면 java.exe라고 있는데 얘가 java라고 입력하면 실행되는애. javac.exe도 마찬가지
맥도 설명돼있고.
리눅스도 설명돼있음.
내가 어디에 있든 java라고 치면 실행된다. 왜? path라고 부르는 환경변수 때문.
▽이게 현재 디렉토리 말고 어디서도 찾을지 정해놓는거잖아
윈도우에선 내컴퓨터 - 속성 - 어드밴스드시스템(고급시스템설정) - 고급탭의 환경변수
-> 위에건 나한테만, 밑에건 이 시스템을 쓰는 모두한테만
-> Path가 위아래 둘다 있는데 더블클릭하면 자바경로 세팅이 돼 있다. cmd에 java라고 치면 운영체제는 현재 내 디렉토리에 java가 있는지 보고 없으면 Path를 참조해서 여기있는 경로들을 하나하나 다 수소문을 해서 자바라는 파일이 있는지를 찾아보고 찾을 수 없으면 파일을 찾을 수 없습니다 하고 에러
->자바가 실행이 안된다면 Path환경변수를 추가해주시면 됩니다. Edit클릭하고 여러분의 경로를 추가한뒤 OK
맥, 리눅스는 .bash_profile 어쩌고 하던데 뭐냐 신기하네
∴ java, javac가 어떻게 실행되고, 물리적으로 어떤 실체를 갖고 있는가에 대한 강의 였다.
==============
12-3 이클립스 없이 컴파일 - 컴파일과 실행하기
탐색기로 소스코드가 위치하고 있는 디렉토리로 이동, 경로복사,
cmd에서 cd 우클릭(경로면 우클릭만해도 붙여넣기가됨), 엔터, dir해보면 목록 나옴.
그 다음 javac Program.java엔터 하면 class파일이 생성됨.
에러가 나면 javac -cp “.” Program.java 를 해보고 이래도 안되면 구경해
프로그램 실행은 java. 얘가 버추얼머신, 그 어마어마한 일을 하는 녀석. 얘한테 내가 class파일을 만들어놨으니까 실행해라고 얘기를 해주는 것. java Program이라고. .class는 붙이지 마십쇼.
안되면 java -cp “.” Program해보기 cp는 클래스 패스, .은 현재 디렉토리라는 뜻
실행하면 클래스 파일의 이름과 같은 클래스를 찾고, 거기에서 main이란걸 찾고, 그리고 그 main중괄호 안에 있는 코드를 순차적으로 실행하고 종료하도록 약속돼있다.
우리는 그 약속에 따라 main이라고 하는 메소드를 만들고 클래스를 만들어서 클래스의 이름과 똑 같은 java확장자를 만들면 컴파일하고 실행시켜서 우리가 원하는 프로그램이 만들어지게된다 라는겁니다.
=====================
12-4 이클립스 없이 컴파일 - 라이브러리를 이용하고 있는 프로그램의 컴파일
내가 만든 프로그램만 실행할 때는 지금까지 한것처럼 하면 되는데
다른 사람의 것을 이용하고 있다면 조금 더 복잡해짐.
코드를보면
얘는 이 코드 안에 없어요 import했음.
이 코드 안에서 Elavator라고 치면 누구냐면
OkJavaGoinHome.java와 같은 디렉토리에 있는 org밑에 opentutorials밑에 iot밑에 Elavator.class 다.
org~~iot.Elevator;에서 org~~iot 만큼을 패키지라고 부름. 작은 프로그램들이 모여있는 패키지.
거기에 있는 Elevator.class파일(class파일이 로딩이구나)을 로딩하는 코드가 import org~~iot.Elevator;
▽그럼 그 코드가 이 java안에 그대로 붙여진다고 생각하면 되겠구나
import됐기 때문에 이제 new Elevator의 Elevator라는 코드를 통해
우리는 Elevator.class파일을 이용할 수 있게 되는 것. ▽저 파일은 클래스고 객체가 생성이 되는 거겠지
OkJavaGoInHome.java 파일을 컴파일 하면 내부적으로 ~iot 패키지안에 있는 파일들도 필요로하기 때문에 얘네들도 컴파일이 됨. 그래서 어쩌구.class파일이 생성 된다.(그래야사용할 수 있으니까)
(▽import한거 말고도 .class가 생성되는데 import한 애가 그 안에서 또 다른걸 import하나봐)
OkJavaGoInHome와 org~를 폴더 하나 새로 만들어서 거기에 넣었다.
그러면 (▽import가 org로 시작하니까) javac를 했을 때 존재하지 않는다고 에러난다.(▽경로가 맞지 않으니까)
이럴때 사용하는게 class path, 줄이면 -cp.
우리가 컴파일 하려고 하는 클래스들이 어디있는지
javac --class-path 해도되고
를 줄여서 javac -cp “.;lib”
:
.는 현재 디렉토리에서도 찾아야되니까
;는 구분자 (맥과 리눅스에서는 : )
lib 는밑에있으니까 찾아보세요
뒤에 이어서 ;뒤에 계속 쓸 수 있다
javac -cp “.:lib” OkJavaGoInHome.java 하면 이제 lib폴더 안에 org가 있어도 컴파일이 됨. class파일이 만들어짐.
실행 java OkJavaGoInHome : error - org를 lib밑에 숨겼으니까
java -cp “lib” OkJavaGoInHome 으로 하면? 또 lib에서만 찾음.
그럼 java -cp “.;lib” OkJavaGoInHome 해줘야 현재 디렉토리에서도 찾음.
이제 현재디렉토리에있는 OkJavaGoInHome도 찾고,
저~기에 있는 다른 클래스파일들도 찾고 드디어 해결.
다른사람이 사용할 수 있도록 잘 정리된 프로그램들을 Library.
혼자서 개발 다하지 않음. 뭐가 있는지 살펴보고 견문을 넓혀
=====================
12-5 이클립스 없이 컴파일 - 입력과 출력
터미널 환경에서 프로그램에 아규먼트를 전달하여 실행해 보기. 입력값에 따라 다르게 동작
->실행할 클래스 파일 이름 다음에 연달아서 입력하면 됨.
String id와
String bright 두 가지 값임.
java OkJavaGoInHomeInput “~~~” 15.0 : 하면 됨, 띄어쓰기로 구분. 띄어쓰기 까지 포함할거면 따옴표
//15.0은 큰따옴표 안에 넣어도 되고 소수점 생략할 수 있습니다
-> 오 이클립스(Run Configuration의 Argument탭에서 입력)보다 쉬워보여