.java 파일 안에 여러가지 예제들을 넣을 수 있다.
-> class를 public으로 만들지 말고 그냥 class로 선언하고 그 안에 메인 메소드를 넣어 놓으면, 각각 class 별로 따로따로 구동시킬 수 있다.
◆JAVA를 비롯한 개발언어에 대한 멘토님의 학습 팁 몇 가지
되도록이면 처음부터 유튜브를 보려고 하진 말자.
요새는 유튜브에도 좋은 개발 강의가 많기 때문에 유튜브를 절대 보지말라곤 하지 않겠지만, 개발 기술의 트렌드에 대한 정보는 대부분 다 영어이며, 활자로 되어있다.
편한 매체에 중독되어 버리면 나중에 활자를 봤을 때 머리에 딱 들어오지 않는다. 도저히 어려워서 뭔소린지 모르겠는 것(이를테면 객체지향)에 한해서 영상 시청을 권한다.
개념을 너무 파고들려 하지 말고, 아 저런게 있나보다 하자.
-> 이게 뭐야? 저건 뭐지? 아씨 뭔 말이야? 하면 끝이 없다. 이건 뭔소리야? 하는 순간 끝난다.
그냥 아, 저런게 있나보다. 하고 넘어가는 것이 좋다. 뭔소리야? 를 이해하려면 변수에 대해서 메모리, 하드웨어 개념까지 들어가야 한다.
나중에는 CS지식 공부하면서 결국 알아야 하는 것이 맞지만, 지금은 아니다.
계산기 내부 구조를 몰라도 계산기를 쓸줄 알면 되듯, 구조를 잘 몰라도 사용법을 익히고 '잘 쓸줄 아는 게' 더 중요하다.
언어는 약속이고 규칙. 왜? 로는 해결할 수 없고 그냥 받아들여야 하는 경우가 생각보다 많다.
->일본어 공부 해봐서 알것. '왜 저런거지?' 라고 하지말고 '아 저렇게 쓰나보다' 가 좋다.
유용한 IntelliJ 단축키 몇 가지
▶soutv 쓰고 엔터하면 위에 선언한 변수를 잡아와서 sout에 찍어준다. ("변수 이름 = " + 변수); 라고 자동완성됨.
▶fori 쓰고 엔터하면 i = 0;으로 흔히 많이 쓰는 for문의 구조가 나온다.
마찬가지로 public class 안에서 psvm 치고 엔터하면 메인메소드가 자동완성된다.
이거 하나하나 타이핑하던 서리하 어디갔니. 내 인생의 3분의 1을 손해본 기분이다. 흑흑.
report 1_2 의 System.out.println(true + null); 은 이렇게만 쓰면 오류가 난다.
그러나 이걸 굳이 문자열로 찍고 싶다면, 이렇게 찍어주면 된다.
System.out.println("" + true + null);
-> "" 을 붙이면 모든 애들을 String화 시켜주기 때문에 문자로 찍힌다.
Report 5의 문제를 보자! 그리고 건호님의 말씀을 떠올려보자.
this. 은 인스턴스 변수에요. 자기자신을 불러오는거죠.
-> 얘는 필드(=클래스에 선언된 변수. 클래스 변수 + 인스턴스 변수)의 생성자다. 즉, 필드의 초기화용 메서드라는 것. (생성자는 메서드이지만 메서드가 아닌 독특한 녀석인데, 일단 넘어가자.)
-> 즉, 얘는 기본적으로 필드의 어떤 값을 지정할 수 있는 애이기 때문에, 얘를 호출하는것 만으로 필드를 가리킬 수 있는 것이다.
??? 생성자가 왜 필드의 값을 지정할 수 있는데요?
-> 생성자는 필드의 초기화를 담당하니까. 초기화는 변수에 값(정확히는 메모리)을 할당하는 것을 의미!
대강 이런 의미로 이해하자.
this.name = name; 의 뜻은
this.(얘가 초기화하는)name(이라는 변수 있잖아 클래스에 있는거) = name(같은 이름의 매개변수를 인자값으로 받게 하고 싶은데 잘부탁해!);
인것.
아니, 그냥 이름 다르게 하면 안돼요?
-> 얘가 필드에서는 String name인데 어디서는 nickname이고 어디서는 name2고 어디서는 ireum이면 너는 뭐가 뭔지 알수있겠냐? 이 단순한 코드가 끝일거라고 생각하지 말것. 현업의 코드는 나이아가라다.(언리얼엔진 VFX 툴 아님)
그리고 this. 사용 이해에 도움주신 블로그에 감사!
이 블로그도 감사!
-> 생성자도 일종의 메서드라 오버로딩 해서 쓸수 있어!
(오버로딩 뭐였지? 같은 이름 메서드 여러개 쓰는것. 단, 타입이나 변수 갯수, 위치가 달라야함!)
-> 오히려 기본 생성자가 아닌 생성자를 사용할 때는 당연히 매개변수가 필요한 상태!
내가 필드(클래스에 선언된 변수)들을 뭘 어떻게 쓰고 싶은지 알려줘야 그 방향으로 작동하기 때문.
-> 이걸 안 알려주면 별 생각 없거나 필드를 선언 안했기 때문에,컴파일러가 기본 생성자를 몰래 고스트로 박아주는 것 뿐임. 내가 필드를 어떻게 쓰고싶다는 방향이 있으면 매개변수 있는 생성자를 쓰는게 맞음!
그리고 매개변수 있는 생성자 관련 블로그. 압도적 감사!
이제 내가 짠 코드에 단 주석을 보면서 조금씩 이해해보자.
class Student {
String name;
int ban, no, kor, eng, math;
public Student(String name, int ban, int no, int kor, int eng, int math) {
//매개변수를 가진 생성자. 생성자(매개변수) 꼴.
this.name = name;
this.ban = ban;
this.no = no;
this.kor = kor;
this.eng = eng;
this.math = math;
//this.name은 필드(클래스 변수), name; 은 매개변수를 의미(괄호안의 애라는 것)
// 저 필드(클래스 변수)는 = 매개변수 이거를 값으로 받아! 라는 뜻
// 그래서 밑에서 new Student(); 로 메소드 소환해서 괄호안에 매개변수 값 다 입력해준거임. 이 형태대로 출력해달라고.
}