멘토링 복습 - JAVA 기본 문법, 조건문과 반복문, 객체지향(I)

LIHA·2023년 1월 23일
0

항해99

목록 보기
21/54

1/18 JAVA 기본 문법


여러 예제들을 한번에 archieving 하는 방법

.java 파일 안에 여러가지 예제들을 넣을 수 있다.
-> class를 public으로 만들지 말고 그냥 class로 선언하고 그 안에 메인 메소드를 넣어 놓으면, 각각 class 별로 따로따로 구동시킬 수 있다.

◆JAVA를 비롯한 개발언어에 대한 멘토님의 학습 팁 몇 가지

  • 되도록이면 처음부터 유튜브를 보려고 하진 말자.
    요새는 유튜브에도 좋은 개발 강의가 많기 때문에 유튜브를 절대 보지말라곤 하지 않겠지만, 개발 기술의 트렌드에 대한 정보는 대부분 다 영어이며, 활자로 되어있다.
    편한 매체에 중독되어 버리면 나중에 활자를 봤을 때 머리에 딱 들어오지 않는다. 도저히 어려워서 뭔소린지 모르겠는 것(이를테면 객체지향)에 한해서 영상 시청을 권한다.

  • 개념을 너무 파고들려 하지 말고, 아 저런게 있나보다 하자.
    -> 이게 뭐야? 저건 뭐지? 아씨 뭔 말이야? 하면 끝이 없다. 이건 뭔소리야? 하는 순간 끝난다.
    그냥 아, 저런게 있나보다. 하고 넘어가는 것이 좋다. 뭔소리야? 를 이해하려면 변수에 대해서 메모리, 하드웨어 개념까지 들어가야 한다.
    나중에는 CS지식 공부하면서 결국 알아야 하는 것이 맞지만, 지금은 아니다.
    계산기 내부 구조를 몰라도 계산기를 쓸줄 알면 되듯, 구조를 잘 몰라도 사용법을 익히고 '잘 쓸줄 아는 게' 더 중요하다.

  • 언어는 약속이고 규칙. 왜? 로는 해결할 수 없고 그냥 받아들여야 하는 경우가 생각보다 많다.
    ->일본어 공부 해봐서 알것. '왜 저런거지?' 라고 하지말고 '아 저렇게 쓰나보다' 가 좋다.

  • 유용한 IntelliJ 단축키 몇 가지
    ▶soutv 쓰고 엔터하면 위에 선언한 변수를 잡아와서 sout에 찍어준다. ("변수 이름 = " + 변수); 라고 자동완성됨.
    ▶fori 쓰고 엔터하면 i = 0;으로 흔히 많이 쓰는 for문의 구조가 나온다.
    마찬가지로 public class 안에서 psvm 치고 엔터하면 메인메소드가 자동완성된다.
    이거 하나하나 타이핑하던 서리하 어디갔니. 내 인생의 3분의 1을 손해본 기분이다. 흑흑.


1/19 조건문과 반복문


report 1_2 의 System.out.println(true + null); 은 이렇게만 쓰면 오류가 난다.
그러나 이걸 굳이 문자열로 찍고 싶다면, 이렇게 찍어주면 된다.
System.out.println("" + true + null);
-> "" 을 붙이면 모든 애들을 String화 시켜주기 때문에 문자로 찍힌다.

  • 문자형과 문자형을 연산할때는 int형으로 변환되어 연산한다.
    byte나 char 타입 같은 경우는 int형으로 변환이 된 다음에 연산이 된다.

객체지향(I)


매개변수는 어떤 때 입력해야돼? this. 은 언제 써? 나좀 도와줘😭

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(); 로 메소드 소환해서 괄호안에 매개변수 값 다 입력해준거임. 이 형태대로 출력해달라고.
    }
profile
갑자기 왜 춤춰?

0개의 댓글