<생활코딩> JAVA (220719 ~)
JAVA실행과정
: 편집기 → 소스코드 작성 → 소스코드 → 컴파일 과정(javac) → 컴파일러 → 바이트코드로 전환 → 바이트코드가 실행명령을함(java) → 자바 버츄얼 머신으로 전달 → 실행결과 나옴
JAVA윈도우 설치
: 뭘해도 실행이 잘 안되길래 찾아보다가..전에 다운받아놓은 자바와 충돌할수도 있다길래 자바 싹 다 지우고 다시 다운로드 했더니 실행 됨! 잘 되나 싶다가 또 Helloworld 실습파일을 찾을수 없다기에..뭐지 하고 가만 보다가 내가 파일을 hellowworld로 저장해놓은걸 발견하게 됨ㅋㅋㅋㅋ w 바로 지워주고 다시 하니까 순조롭게 완료~~ 코딩의 즐거움..별거 아닌 티끌로 막혔다가 그 티끌을 빼낼때의 쾌감이란!
이클립스 설치
:Eclipse창 설명
-패키지 익스플로러: 프로젝트 관리 도구
-패키지: 같은 이름의 파일들을 구별해서 배치시키는(?)
-아웃라인: 소스에 있는 여러가지 문법코드를 시각적으로 표시
-프라플럼: 소스코드에 오류들을 알려줌
-콘솔: 출력된 결과값이 나오는곳
-bin폴더: binary (.class로 끝나는 파일들)
-src폴더: source (.java로 끝나는 파일들)
아악...진짜.....이클립스..너어는 진짜^^..아니 생활코딩 보면서 설치하고 다 잘됐는데 자꾸 결과값이 도출이 안되는거다..에러코드만 뜨고..그래서 또 무한서칭을 하다가 발견한게 자바랑 이클립스는 서로 호환되는 버전이 있다나 뭐라나? 그래서 그 버전에 맞게 깔아줘야된대서 묻지도 따지지도 않고 이클립스를 죄다 지웠다.(지우는데도 개오래걸림 세부파일이 몇천개라..)그래서 다시걍 깔면 되겟징~^^ 하고 맞는 버전을 찾아서 깔앗는데 인스톨러가 화면이 하얀색..나중에 알았는데 이게 악명높은 오류랜다 ㅠㅠ(https://blog.naver.com/toeric1225/222306305671 이분 블로그 참조..결국 이분꺼 보고 나도 해결했음...압도적 감사...!) 하..그래서 진짜 뭐 이거저거 다시 또 다 지우고 다시 깔고 하다가 실패해서 일단 머리도 식힐겸 샤워를 하러감...샤워하면서도 계속 이클립스이클립스 이색기..이런생각하곸ㅋㅋㅋㅋㅋㅋ이닦을때도 막 찾아보다가
https://soranta.tistory.com/16 이분 블로그에서 파일을 제대로 삭제해줘야된다고 해서 다 삭제를 했다 그러고 또 인스톨러 깔앗는데 또 안되네^^ 죽을라고 진짜 ㅋㅎ 그래서 하....완전 패닉이었다가 이클립스 홈페이지에서 zip파일로 된걸로 다시 다운을 받았다
다운도 졸라 오래걸림 ㅠ 그냥 체념하고 기다리는데 저 첫번째분 블로그에서 zip으로 다운받은걸로하면 된다길래 듀근듀근 하다가 완료되서 딱 켯는데 된다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ호다닥 다시 생활코딩 강의 켜서 결과값 출력되는지 해봤는데..
ㅁㅊ 눈물날뻔;;;;; 하 이제 두다리 뻗고 잘수 있을듯...아무튼 내 글도 서치하다가 누군가에게 도움이 됐으면 좋겟어서 쓰는글....
문자와 문자열
:문자는 ' ' 작은따옴표(문자는 한글자 이지만, 문자열로 묶여도 에러가 아님. 즉," "로 묶어도 됨)
문자열은 " " 큰따옴표(문자열은 두글자부터)
*문자열들도 +(더하기)를 통해서 최종값을 출력하는게 가능하다,
안녕+하세요 = 안녕하세요
*"1"+"1"= 1 1 이 나온다. " "은 문자열이기 때문에 나열된 각각의 고유한 값을 갖는다
*만약 큰따옴표를 사용한 대화체를 넣고싶은데 큰따옴표가 이클립스의 고유기호로 인식되지 않게 하려면
\역슬래쉬로 구분을 해주면 된다.
ex) System.out.println("김꼬미는 말했다\ "너무너무 배고파요\"");
출력값 ▶ 김꼬미는 말했다 "너무너무 배고파요"
*줄바꿈을 하고 싶다면 문자열 뒤에 \n (역슬래쉬,소문자n)을 넣으면 줄바꿈이 된다.
ex) System.out.println("김꼬미는 말했다\n\ "너무너무 배고파요\"");
출력값 ▶ 김꼬미는 말했다
"너무너무 배고파요"
자바 변수
:변수 ↔ 상수(항상 일정한 수)
int a; → 변수 선언
int: 데이터 형식 (숫자를 주로 넣는다. 다른걸 넣어도 됨.문자나..아무튼 데이터형식을 지정해주는 변수(?))
a: 변수의 이름
* // 한줄주석표시 /* */ 여러줄주석
*정수: 소수점이 없는 깔끔한 숫자 / 실수: 소수점이 있는 숫자
*int: 정수 지정 코드 /double , float: 실수 지정 코드
*string : 문자열 변수 지정 코드
*문자열 변수는 쓸수있는 방식이 여러개이다(정수 실수에도 적용되려나?▶안됨. clss를 애초에 string로 만들어서 그런듯?int나 double로 만들면 될듯)
기본① string first;
first = "love";
두가지를 한꺼번에② string first = "love";
여러변수를 한꺼번에③ string a, b;
a = "love" ;
b = "happy" ;
system.out.println(a+b);
데이터 타입
:
상수의 데이터 타입
:실수형의 경우 double을 기본적으로 지정해서 사용하는데
굳이 float로 표현하고 싶다면 실수 뒤에 F를 붙이면 된다
ex) float a = 2.2F
*byte와 short는 기본적으로 int(정수)로 설정되어있기때문에 굳이 숫자뒤에 영단어를 안붙여도 된다
long a(변수) = 2147483648;(상수)
|
변수는 long 타입이지만 이 변수에 대입되는 상수가 여전히 int 타입이기 때문에 int로 표현할 수 있는 최대 숫자를 여전히 초과하고 있다. 아래와 같이 코드를 변경해보자.
long a = 2147483648L;
|
L을 붙이자, 오류가 해결되었다. 상수도 long 타입이 되었고, 그 상수를 담을 변수도 long 타입이 되었다.
암시적/명시적 형변환
<암시적 형변환>
:다른 데이터 타입들을 연산하려할때 한쪽의 데이터타입을 다른쪽의 데이터 타입으로 맞춰야 함
(=형변환)
*자동 형변환의 원칙은 표현범위가 작은 데이터타입에서 표현범위가 넓은 데이터타입으로의 변환만 허용
(float > double 변환 허용 / double > float 변환 비허용 더블이 더 크기 때문에 더블의 데이터 손실이 일어남)
*실수 > 정수의 변환도 비허용 (정수는 소수점 아래가 없는데 실수는 있기때문에 소수점 아래 숫자의 손실이 일어남)
*캡쳐2 해설
: int a 는 정수이고 float b는 실수이다.두개를 더하려면 형변환을 해야하는데
앞서 말했듯이 실수에서 정수로는 변환하지 못하기 때문에 int a를
실수로 변경해준다. 따라서 3이 아닌 3.0이 되고 그 둘을 더하면
4.0이 된다. 그리고 c타입이 double이기 때문에 더블보다 작은
float와 int가 가 더블로,최종적으로 형변환이 되는것이다.
명시적 형변환
*저렇게 앞에 괄호를 붙이면 데이터타입이 변환되어 고정된다.
연산자(특정한 작업을 하기 위해서 사용하는 기호)
:종류는 4가지 <대입,산술,비교,논리 연산자>
대입은 x = 1 / 산술은 1 + 1 = 2 요런거..
*여기서 나머지(%)란? ex) result(값이 10이라고 했을때) = result % 7;
10 나누기 7을 하면 3이 남음. 고로 3이 나머지(%)값.
★나누기 해서 나오는 1이 아니라 나누고 남은것이 나머지 값임★
* a = 3 이라고 했을때 1 ~ 6들을 계속 3으로 나누는 것이다. 빨간펜으로 표시된 값이 최종 나머지 값.
뭔가 이해가 안된다면...걍... https://youtu.be/SZFMO1cw3BA
* 문자 + 문자 결합도 쌉에이블이다
1. a/b 의 값은 3.3333...이 나오게 된다. 하지만 a,b 모두 정수이기 때문에
소수점 이하의 손실이 일어나면서 a/b = 3 이 된다.
2. c/d 의 값도 역시 3.3333...이 나오는데 보다시피 c,d 둘다 F가 붙어있는 float 즉, 실수이기 때문에 소수점 이하의 손실이 일어나지 않아서 c/d = 3.33333..이 된다
3. a/d 의 값은 나눠지지 않아서 자바가 자동으로 같은 형식의 형변환을 해준다.
a는 정수, d는 실수이기 때문에 a가 실수로 바뀌게 된다. 이유는 실수 > 정수는 소수점
손실이 일어나서 불가능하기 때문이다. 그래서 a의 값도 10.0 즉,실수가 되어
a/d = 3.33333...이다
이항 & 단항 연산자
:이항 연산자 (1+2 일때 1과 2 즉, 두개를 더해주는 연산자라는 뜻의 이항 연산자이다.)
단항 연산자 ( +3 이나 -3 처럼 양수 음수 단 하나를 표현해주는 연산자. 덧붙여서 3++ 라는 연산도 있는데 이 의미는 3+1이다. 하지만 이항 연산자로 묶지 않고 단항연산자로 한다. 어찌됐건 좌항 우항 모두 값이 넣어져 있는건 아니라서 단항연산자인듯 하다..)
*예제 해석
맨 윗줄부터 차례대로 내려오면서 해석해보자면 i = 3 인데 그 밑에 바로 i++ 를 해줬다.
앞서 말했다시피 ++는 더하기1을 의미하기 때문에 시스템 첫째줄 값이 4가 출력되는거고,
거기서 다시 ++를 했기에 5 가 출력된다.그리고 세번째 줄은..설명이 부실해서 나 혼자 대충 때려맞춰서 해석해보자면ㅠ
이것도 마찬가지로 ++가 앞에? 있기 때문에 전값인 5에서 +1이 되는것 같고.. 그 다음줄인 i++가 괄호 안에 있으면 더하기 출력값이 그 시스템 줄에선 안나온다고 한다.
고로, 맨마지막줄에서 i++(6에서 +1이 된)의 값인 7이 출력된다.
[https://youtu.be/fXrRa0V6eKg]
Boolean
: 참과 거짓을 의미하는 데이터 타입
<비교 연산자>
: 주어진 값들이 같은지,다른지,큰지,작은지 구분하는것,문자까지도 대입 가능하다
* = 와 ==는 아주 다르다.
예를 들어 1 = 2 는, 1에 2라는 값을 대입하는 대입연산자이다.
같다고 표시하고싶으면 1 == 2 라고 써야한다
* != : 부정을 의미. 같지 않을때 씀
* > : 좌항이 우항보다 클때 씀 (반대 <)
* >= : 좌항이 우항보다 크거나 같다 (반대 =<)
* equals : 문자열을 비교할때 사용되는 메소드
* a,b 둘다 "Hello world"로 같아 보이지만, 문자열은 .equals라는 메소드를 사용해서 정의 해야 한다. 그래서 맨 마지막줄에서는 '참'이 나오는것이다. 그리고, 왜 비교연산자에서는 문자가 가능하다고 했는데 여기선 안되냐 하면, 비교 연산자에서는 변수로 문자를 넣은거고 여기서는 단순히 문자 그 자체로 넣은 것이기 때문이다,
+덧붙여서 new String 해주는 이유는 그냥 쓰면 Hello world 는 하나의 위치에 저장된 데이터를 가르키기 때문에 new String을 통해 다른 위치에 데이터를 생성함으로써 두개의 Hello world 를 생성하게되는것이다. a == b 일때 데이터위치가 다르기때문에 false 이고 a.equals(b) 는 데이터위치가 다르지만 저장된 데이터의값 Hello world 는 같으므로 true임.
조건문
: 앞서 배웠던 불린(참/거짓)과 같이 쓰이는것. 불린이 이 조건문에서 핵심적으로 작용하는데, 불린 값을 기준으로 조건문의 실행 흐름을 제어하기 때문
*조건문은 if 로 시작하는데 if 뒤 괄호에 true가 들어가면 중괄호안에 있는 실행문들(=then절)이 실행되고, false면 실행되지 않는다
*조건문 안에 또다른 조건문이 들어가서 중첩되어 작동할수 있음
else
뒤에 오는 괄호에true가 들어있으면 첫번째줄 시스템이 실행되고,
false면 else가 있는 두번째줄 시스템이 실행된다
else문들이 여러줄일때 true가 처음으로 등장했던 줄의 값만 실행 되고,
그 밑이 다 true여도 실행은 되지 않고 구문은 그냥 종료됨.
(즉, 화면에 2만 출력)
*그리고 else는 절때 첫줄에 올수없고 if → else if → else 순서대로 온다.
else if 들이 다 false라면 맨 마지막줄인 else가 실행되는것이다
*else와 else if 둘다 생략은 가능하고, else if절은 여러줄이 등장할수 있다
*저 예제를 그대로 실행하게 되면, 오류가 뜨면서 아무것도 나오지 않고, 따로 출력값을 도출하는 방법이 있음
1. 상단에 초록색 run 버튼 누르면 그옆에 조그만 삼각형 있는데 거기서 '런 컨퓨레이션'클릭
2. 왼쪽에 새문서 추가하기같은 버튼 'add'를 누르고
3. 오른쪽창에서 name을 적당히 적어준다
4. 그리고 그 아래 큰창에 원하는 출력값을 적어준다
5. 그렇게 해서 실행시키면 이클립스 원래 창에 원하는 값이 출력된다
Switch문
*switch(1)이면 아래 case(1)만 출력되는게 아니라, 원투쓰리 모두 다 출력됨
switch(2)면 투,쓰리가 출력됨 (위에거는 출력 안되고 아래것들만 출력)
*원하는 값만 출력시키고 나머지는 출력안되게 하고 싶다면 break를 추가하면 됨
*break가 걸린 상태로 default를 추가시키면 화면엔 one이 출력된다.
이유는 switch의 설정값이 one이라서 one인 값만 나오는 것인..듯?
*만약 case가 1,2,3 까지밖에 없는데 switch(4)를 쓴다면 default라고 출력된다.
논리연산자
*&& = and
이 and연산자 즉&&는, 좌항과 우항이 모두 참이여야만 실행된다. 둘중 하나라도 false면 출력되지 않는다.
*|| =or
좌항과 우항중 둘중 하나라도 참이면 실행
*! = not
불린의 값을 역전시킴. !true = false로 변함 !false = true로 변함
반복문
:
* while(조건문) (i < 10 = i가 10보다 작을때만 true)
System.out.println("Coding Everybody" + i) (코딩에블바디에 10보다 작은 결과값을 붙여서 최종값을 실행시켜라)
i++; (i = i+1 즉,계속 0에 1을 더한값이 10 이하의 값들만 최종 출력이 되는것이다.)
따라서 첫번째 실행문은 코딩에블바디 +0에 1을 더한 1 = 코딩에블바디1
그 후의 실행문들은 전에 나왔던 값을 토대로 계속 반복이 된다.
1이된 i값에 또 i++ 를 하고하고..그래서 10보다 작은 9까지만 출력이 되는것이고
그 이상은 false라서 출력되지 않는것이다
for문
:
*for문이 처음 실행될때 i < 10 여기까지 true면 바로 아래식으로 내려가 코딩에블바디 + i = 코딩에블바디0이 출력되고
그 다음부터 i++가 실행되어 또 아래줄로 내려가 코딩에블바디 + i(=1)= 코딩에블바디1 이 된다는데..
왜 중간에서 멈추는지는 모르겠지만..쨌든 일단 그렇다고함 (https://youtu.be/HoJnoXNCock)
break / continue
: for문부터 해석하자면 (i의 값은 0이고 i가 10보다 작을때 구문이 실행이 된다. 그런데 i++로인해 i에 1씩 더해지게 되고 결론적으로는 1씩 더해진 최종i의 값이 10보다 작으면 결과값들이 출력이 됨. 그리고 if문으로 넘어가보면, i의 값이 5가 될때 구문을 break 즉 멈추라고 되어있음. 그래서 최종 결과값이 0~4까지만 나오는것. 0~4까지는 i값이 5가 아니니까 break를 그냥 통과해버려서 코딩에블바디 + i 의 값에 대입이 되어 최종 출력이 되는것)
*원래는 {break} 이런식으로 중괄호로 감싸야 되는데 break가 짧은 한줄이라서 중괄호를 생략한것이다. 정석은 중괄호를 써줘야함 특히 구문이 길때는 꼭!!
*continue에서는 i==5일때 일단 구문을 멈춘 뒤에 처음으로 돌아가서 다시 실행시키게 해주는 반복문이다. 그러므로 최종값들은 5만 빼고 이렇게 출력이 됨
반복문의 중첩
:첫번째 for문 : i=0 이고 i는 10보다 작고, i는 1씩 증가한다. 즉, 0~9까지 반복되면서 실행된다
두번째 for문: j=0이고 j는 10보다 작고, j는 1씩 증가한다. 즉, j도 0~9까지 반복되면서 실행된다
Systemout을 시키면 i와 j의 값은 현재 둘다 0이기 때문에 00이 출력.
그리고 그 다음에는 더 아랫줄에 있는 j구문이 다시한번 실행되게 된다. 그러므로 j는 10이 넘지 않을때까지 실행되어
9까지의 값이 나오게 됨. 10이상이 되어버리면 false기 때문에 j실행문은 종료가 되는것임.
그리고 그 다음에 j의 실행문이 끝나면 i가 다시 실행되어 j와 동일하게 9까지의 값이 나온다.
*중첩문을 만들때 조심해야할것은 반복문의 기준점, int i , j 이런것들이 이름이 겹치면 안된다
*지금까지 배운 변수,조건문,반복문은 모두 "절차지향"이다
(앞으로 나올 메소드까지 포함)
배열 Array
:연관된 정보들을 그룹핑 하는데 사용
어떨때 쓰냐하면, 하나의 변수에 여러개의 데이터를 담을때 연관되어 있는 여러개의 데이터를 하나의 변수에 담아서 쉽게 관리할수있게 해줌. 즉 그룹핑을 해주는것!
*교실(=프로그램)에는 여러명의 학생들(=상수,데이터)이 있다. 그리고 반에는 반장(=변수)이 있다.
그 반장이 전학을 가서 없어지거나 바뀌어도 새로운 반장이 또 존재한다.
배열의 정의
:
classgroup 변수 이름
string[ ] 데이터의 형식,타입
" " 문자열
" " , " " 배열들의 정의
그정의한 배열들을 classgroup이라는 변수에 담은것
▶정리하자면, classgroup라는 변수에 담긴 배열들은, 문자열의 데이터 타입의 형식을 가진(=string) 데이터들의 모임 ( [ ] )이다.
배열의 제어
:
* classgroup [0] 하면 최진혁이 나온다. 컴퓨터의 언어로 첫번째는 1이 아니라 0이기 때문에.
* [ ] 안에 있는 0,1,2,3 은 영어로는 'index' 한국말로는 '색인(본문 중의 중요한 항목들을 한곳에 모아 이들이 본문에서 어디있는지를 기재한것)' 그리고,저 네개의 이름들을 부르는 단어는 영어론 'element' 한국어론 '원소'
*new(새로운 어떤것)string(그 새로운것의 데이터타입은 문자열이다)[4](문자열 데이터 타입은 4개의 원소로 이루어져 있다) 라는 뜻..
*new string [ ] 괄호 안에 몇개인지 꼭! 지정을 해줘야한다.
*.length는 classgroup(=변수)에 담겨있는 배열,그 배열이 담을수 있는 원소의 갯수를 나타낸것이다. 고로, length는 4임.
풀어서 말하자면 .length는 변수에 값이 몇개 담겨있느냐를 알려주는것이 아니라!!! 변수에 담겨있는 배열은 몇개의 값을 수용할수 있느냐를 알려주는 것임.
<반복문과 배열의 조화>
:
(줄대로 차례대로 해석하자면..)
members라는 변수는 문자열데이터에 들어있는 배열이다.
for문은 세미콜론을 기준으로 세개의 덩어리로 구성되어있다. for문을 차례대로 해석해보면,
i값이 0으로 시작해서[초기화] i값이 3보다 작으면[반복조건] (왜 3이냐면 members.length값이 3. 최진혁최유빈한이람 총 3개의 배열을 담는 그릇이라) 1씩 증가.[반복실행] 그렇게 해서 세번째줄인 members[i]의 첫번째 값은 0이다.
따라서 0번째는 최진혁 이기 때문에 members의값은 최진혁이 된다.
그렇게 해서 네번째 최종줄에서는 member(최진혁)+상담받았습니다. = 최진혁 상담받았습니다. 가 출력되는것이다
for-each
: for-each가 생긴 이유는 반복문과 배열을 뗄레야 뗄수 없는 관계이기도 하고, for문을 좀 더 간편하게 사용하기 위해서이다. 바로 전편만 해도 값을 알아내려면 int의 값을 지정하고 length를 알아내고 반복실행을 설정하고..했는데 for-each에서는 훨씬 더 간편하게 가능하다.
*members라고 하는 변수에 담겨있는 데이터들이 있다. 이들을 배열의 반복문이 진행될때마다 하나씩 꺼내서 e에다가 담아준다. 고로, 마지막줄 시스템아웃에서는 members에서 꺼내져 담긴 데이터가 e에 담기고 + 상담을 받았습니다. 해서 각각의 최종값이 출력되는것이다.
배열의 오류
:
*첫번째 코드 오류 원인: 멤버라는 변수에 배열 3개의 원소를 넣었다. 그리고 출력할때 인덱스[3]을 했는데 각 원소가 갖고 있는 인덱스는 진혁0 유빈1 이람2 인데 이 원소 영역에 해당하지 않는 값 3을 출력했기에 오류가 발생했다
*Exception은 예외라는 단어
*두번째 코드 오류 원인: 배열 사용 시 이전 수업에서 배웠던 =new문을 사용할 수 있다 이 new문을 사용하려면 원소의 갯수를 지정 후 이 안에 있는 원소는 뭐가 있는지 구체적으로 쓰는데 인덱스가 생성될 수 있는 총 갯수를 3개라고 지정했으나 넣으려는 원소 갯수가 진혁,유빈,이람,이고잉 까지해서 4개의 원소를 입력해서 오류가 나오는것이다
메소드
: 메소드 = 함수
메소드의 정의와 호출
:
*위에는 i<10 , i++ (1씩증가)니까 0~9까지 결과값이 나옴
*아래에서 numbering()으로 호출해주면 위에 있는 메소드의 결과값이 출력됨 (0~9)
*위에는 정의/ 아래는 호출 이라고 부름
입력값(매개변수와 인자)
:
*첫째줄부터 해석: limit이라는 변수는 정수만을 수용할수 있다
*그래서 차례대로 타고 내려와서 while (i<limit=5) 되어서 최종값이 0~4가 되는것
* (int limit)를 매개변수(parameter)라고 부르고, 넘버링 옆에 있는 (5)는 인자(argument)라고 부른다. 그런데 실제로는 매개변수와 인자를 혼용해서 많이 쓰니 알아두자!
*인자, 매개변수 둘다 저렇게 콤마를 붙여서 사용할수 있다
출력 return
: 메소드가 동작되서 메소드 밖으로 돌려준다 라는 개념에서의 출력, return이다.
* 문자열을 담을수 있는 변수 result에 넘버링 이라는 메소드가 실행한 결과를 대입하는 식이다.
* 넘버링(1,5)는 위에 init와 limit에 각각 담기게 된다
그리고 output은 아무것도 담겨있지 않은 상태. " "
while문 아래로 내려가보면 ouput += i; 라고 되어있는데 이걸 풀어쓰자면, output = ouput+i 와 동일한 식이다.
따라서 최종결과값이 1,2,3,4가 나오게되는데 이유는 일단 limit이 5로 걸려있고, 시작이 init 1 이니까 1,2,3,4가 되는것.
그리고 output앞에 return이 붙어있는데, 이 return이 붙으면 자바는 프로그램을 그 즉시 반드시 종료시킴.
그리고 return뒤에 있는 값을 외부로 반환을 해줌.
그래서 result 값이 1,2,3,4를 갖게 되어 외부로 출력이 되는것이다. (ㅠㅠ어려워 걍 외워야될듯)
*void : 빈공간,공허라는 뜻. 이 void가 메소드 앞에 붙으면 이 메소드의 리턴값은 존재하지 않는다 라는 뜻이다.
*데이터 형식을 string처럼 딱 지정해주면 유연성은 떨어지지만, 헤메지않을수 있다. 그래서 적재적소에 맞게 잘 사용해야한다..!
*데이터를 굳이 리턴하는 이유 : 메소드의 부품으로서의 가치를 높이기 위해서
(예를 들어 그냥 화면에 결과값을 출력하는것이 아닌, 메일로 보내던가 파일로 출력하던가 하라고하면 그렇게 못하기 때문에 리턴하는 방법이 존재하는것이다. 화면에만 출력하는건 너무나도 제한적인 방법이기 때문에..)
*out.txt라는 파일을 만들고 system out으로 출력도 하는 예제이다.
out.txt라는 파일에 result값을 기록(write)함 이라고 해석하면 됨
*return을 만나게 되면, return뒤의 값을 반환하면서 식을 종료시키기 때문에 나머지 2,3은 컴파일조차 실행되지 않음
*num이라고 하는 메소드에 1이라고 하는 입력값을 주고, 그 입력값은 곧 i가 된다.
고로, if문에서 i==0 이라는 식이 false가 되기 때문에 첫번째 리턴값은 실행되지 않고 true인 식을 찾아 내려간다.
즉, 두번째 else문은 true기 때문에 one이 출력되며 메소드가 종료된다.
*getmembers라는 메소드를 만들고, 메소드의 리턴값은 string으로 지정을 해줬다.
좀더 풀어쓰자면 getmembers의 리턴값은 문자열의 데이터를 담을수 있는 그릇이 된다 라는 뜻.
그리고 나서 members라는 변수에 배열을(=세명의 이름) 담는다.
따라서 getmembers가 받게 되는 값은 저 배열들이기 때문에 return값은 세명의 이름이 한번에 나오게된다.
배열을 하나만 쓰고도 여러개의 값을 넣는 방법.
메소드 왤케 어려워잉ㅇ~!~!~!ㅏ나 울어 ㅠ
입력과 출력 (IO / Input Output)
:
*오른쪽에서 왼쪽으로 식을 해석하자면,
args라는 이름을 갖고있는 변수들은 문자열의 데이터타입을(string)담을수 있는 배열이고
근데 그것들이 ( ) 중괄호 사이에 있다는것은 main이라는 메소드의 파라미터(메소드로 들어오는 입력값)이다.
그리고 main이라는 메소드는 출력값이 존재하지 않음(void)
그 밑줄로 가서, args라는 변수에다가 몇개의 배열을 담을수 있는가가 arg.length다.
하지만 이 맥락에서는 사용자가 inputdemo라는 어플을 실행할때 이 프로그램 안으로 전달한
입력값의 수를 알려주는 영역이 args.length가 되는것.
그리고 cmd로..막 뭐 하시는데..일단은..스킵...보긴했지만....일단은...ㅎ
*cmd프로그램을 이용해서 args에 'one'이라는 값을 넣었다.
이어서 그 값들이 세번째줄 args에 넘어가고 그것들이 for each구문(각각의 값들이 e : 에 들어가서 하나씩 출력되는..필기해놓은거 있으니 참고!)을 만나 e에는 one이 들어가게 되고 마지막줄 e에까지 그 값이 도달하게 된다.
그래서 화면에는 결과적으로 one이 출력되게 되는 것이다.
*두번째줄로 바로 넘어가서 System.in(=사용자가 입력한 값이라고 하는 기호로 대충 이해해두면 됨)이 먼저 실행된다.
Scanner라는 객체를 새로 만들면(=new) 사용자가 입력한 값을 스캐닝하는,알아내는 역할을 하겠다 정도로 해석해면 됨.
그리고 그렇게 만들어진 값들을 sc라는 변수에 담아내면,우리는 sc라는 변수를 통해서 저 식을 제어할수 있게 되는것이다.
그렇게 세번째줄로 넘어가면 nextint가 보이는데 여기서 int(정수)이기 때문에 수식 입력창에는 반드시 숫자만 입력해야함.
그리고 저 sc.nextint라는 것은 우리가 입력값을 칠때 그것들은 듣고있는 역할을 한다고 생각하면 조금 쉽다.
입력값을 막~입력하고 엔터를 딱 누르면,
왼쪽의 int i의 i 로 그 값을 우루루 쏟아내면서 sc.nextint는 종료된다.
그렇게 해서 그 i의 값이 네번째줄 pintln(i)값으로 들어가면서 수식이 계산되고 최종값이 출력되는 것이다.
* 이전 식과 다르게 while문을 사용했다. while옆에있는 괄호가 true이면 조건문이 반복되고 false면 종료된다.
괄호 안에 sc는 scanner 객체가 담겨있는 변수고, sc는 hasnextint라는 메소드를 호출하고 있는것이다.
그래서 자세히보면 hasnextint에서 int는 정수를 의미하기에 우리가 입력값을 정수로 입력하면
네번째줄에 sc.nextint()*1000 이 되어서 우리가 입력한 정수*1000 의 값이 나오는 것이고
문자같은 맞지 않는 것을 입력하면 false가 되어 구문이 종료되게 되는 것이다.
*File이라는 것은 변수고,그 변수는 new file이라는 객체를 생성을 했으며 그 객체는 out.txt라는 정보를 갖고 있다
그리고 저렇게 file을 지정하게 되면 out.txt라는 이름을 갖고 있는 파일의 내용을 입력값으로 가져와라
라고 scanner객체에게 지시하는 것이다.
그래서 결론적으로 타고타고 내려와 system줄에서 그 file의 값(1234)가 가져와져서 *1000
을 하게 되어 최종값이 출력이 되는것이다.(1234000)
그리고 try와 catch는 예외 이다. out.txt 파일을 찾지 못했을때는 에러 내용을 화면에 출력하라는 내용이다.