좋은 강의 정말 감사합니다! 자바1 재생목록 3번 보고 원본 자바 재생목록을 쭉 보는중입니다. 책으로 공부했을 떄 이해하기 어려웠던 내용도 영상을 보니 수월하게 받아들여지네요. 이 재생 목록도 2~3번 돌려보면서 다시 이해해보려고 노력하겠습니다. 코딩 입문자에게 빛과 같은 채널입니다. 감사합니다!
@골아파덕-u9n3 жыл бұрын
크... 이번 강의는 정말 중요하고 조금 어렵기도 하네요. 3:03 자바는 생성자를 정의하면 기본 생성자를 자동으로 만들어주지 않는다. 매개변수 있는 생성자의 경우 호출 시 기본생성자가 없기 때문에 오류를 발생시킨다. 4:30 자식 클래스의 객체를 인스턴스화 시키면, 자식 클래스의 생성자를 실행하기전에, 부모 클래스의 생성자를 먼저 호출하게된다, 8:40 super의 필요성 - 중복 코드의 제거. super가 있어도 기본생성자는 정의해줘야하나보다.
@가나다-z6h9e2 жыл бұрын
와 신기하네요! 처음엔 조금 이해하기 어려웠는데 코드쳐보고 이렇게 저렇게 해보니 이해가 되네요!!! 강의 너무 잘 봤습니다! 감사합니다~!
@_21jung833 жыл бұрын
어렵다😂 생성자부터 다시 보고 오겠습니다!
@그린라벨7 жыл бұрын
감사합니다 쉽게 설명해주시네요
@gulitt2853 Жыл бұрын
감사합니다
@joankim81554 жыл бұрын
불평한다고 하니 컴퓨터가 귀여워보여요 ㅋㅋㅋ 컴퓨터를 귀여워 보이게 만드는 재주를 가지고 계시네요 ㅎㅎㅎ
@우주배경복사2 жыл бұрын
3:01 경에 무얼 보고 기본 생성자가 없다고 판단할 수 있는 건가요? ㅠㅠ
@골아파덕-u9n Жыл бұрын
매개변수가 없는 생성자가 없어서, 기본생성자가 없다고 하는거에요. 이고잉님이 말씀해주신것처럼 매개변수가 있는 생성자를 만들었다면, 자바는 생성자를 자동으로 만들어주지 않기 때문에 명시적으로 선언하라는 오류처럼, 매개변수 없는 생성자를 만들어줘야한다는 것이져.
@vicivenividi61563 ай бұрын
하위클래스를 인스턴스화하여 생성자를 호출하는 방법은 두가지다. 일단 하위클래스의 생성자를 호출하면 상위클래스의 생성자가 무조건 먼저 호출된다. 1. 상위클래스에 생성자를 정의하지 않았다면 자바는 기본생성자를 만들고 실행시켜 하위클래스 생성자에 접근한다. 상위 클래스 생성자를 따로 정의했다면 기본 생성자를 만들지 않아서 사용자가 직접 만들고 하위 클래스 생성자로 접근시킨다. 2. 하위 클래스 생성자의 내용에 상위클래스의 생성자를 사용할거란걸 밝힌다. Super(1,2) 즉 1번은 흐름대로 통과하게 하는거고 2번은 역으로 사용할걸 가르키는거다 인자값을 언제 전역변수로 만드느냐 시점의 차이가 있다. Super를쓰는 방법은 복잡한 로직일경우 단순화된다.
@Yasmin4-y9p4 жыл бұрын
c++과 자바의 다른점이 기본생성자를 의무적으로 만들어야한다는 것에서 차이가 있네요. 헷갈립니다 ㅠㅠ
@골아파덕-u9n3 жыл бұрын
7:50 다시보기
@insight-vf9nc4 жыл бұрын
상속과 생성자 암시적인 상위생성자가 정의되어 있지 않다. 명시적으로 정의해야 한다. Implicit super constructor Calculator() is undefined. Must explicitly invoke another constructor 하위클래스를 인스턴스화 시키면 하위클래스의 생성자를 호출하기 전에 상위클래스의 생성자를 호출하도록 약속되어있다. 그렇게 동작하도록 만들어져 있다. 기본생성자가 아닌, 매개변수가 있는 생성자를 만들어 놓으면 JVM은 기본생성자를 자동으로 정의하지 않는다. 즉 하위클래스가 상속을 받을 때 상위클래스에 있는 기본생성자를 호출해야 하는데 그 기본생성자가 존재하지 않으므로 에러가 발생하는 것이다. 하위클래스는 생성될 때 자동으로 상위클래스의 생성자를 호출하도록 되어 있다. 그런데 상위클래스가 매개변수가 있는 생성자를 선언하면 JVM은 자동으로 기본생성자를 생성해주지 않기 때문에 하위클래스는 기본생성자를 호출할 수 없고 그렇기 때문에 에러가 발생한다. 부모클래스의 기본생성자를 만드는 이유이다. -super 상위클래스의 기본생성자를 만드는 방법 외에 상위클래스의 기본생성자를 만들지 않고도 문제없이 객체가 동작하도록 하는 방법은 super()라는 키워드를 쓰는 방법이 있다. 부모클래스의 생성자라는 뜻이다. 하위클래스의 초기화코드는 항상 슈퍼생성자를 호출한 다음에 와야 한다. 하위클래스가 인스턴스된다는 것은 이미 상위클래스가 인스턴스화되었다는 뜻이므로 (=상위클래스의 초기화가 끝나야 하위클래스의 초기화가 가능하다) 상하위클래스들에 중복된 생성자메소드가 있다면 하위클래스에{ 첫줄에super 키워드를 써서 중복을 막을 수 있다. 하위생성자의 매개변수(int left, int right)가 super(left, right)로 들어간다. 그러면 상위클래스에서 매개변수(int left, int righrt)가 있는 생성자가 호출이 되고 매개변수의(int left, int righrt)의 값이 각각 left; right;로 들어가게 되는 것이다. 이렇게 하위클래스가 상위클래스를 참조할 수 있는 방법으로 super라는 키워드가 있다. 하위클래스에서 super키워드를 { 첫줄에 위치시키고 그 후에 하위클래스의 초기화코드를 작성한다. 하위클래스의 초기화코드는 항상 슈퍼클래스를 먼저 호출한 후에 작성되어야 한다. 그리하여 상위클래스의 초기화를 먼저 진행한 후 하위클래스의 초기화를 진행한다. 하위클래스가 인스턴스가 된다는 것은 곧 상위클래스가 이미 인스턴스화 되었다, 즉 상위클래스가 초기화가 다 끝난 상태에서만 하위 클래스의 초기화가 가능하다는 말이다. 초기화가 뭐였지? 준비? ?질문 10:30 public Calculator(int left, int right){ this.left=left; this.right=right; } 가 존재하면 그 밑에 public void setOprands(int left, int right){ this.left=left; this.right=right; } 는 무슨 역할을 하는 건가요? 하위클래스가 상속받을 때 상위클래스에 있는 기본생성자 메소드를 호출하도록 되어 있으므로 상위클래스의 기본생성자를 생성하여야 한다. super키워드. 상하위 클래스의 생성자들이 하는 일이 같을 때 코드의 중복방지를 위하여 상위클래스의 초기화를 선행한 후 하위클래스의 인스턴스화를 위하여.
@njdjwgu4 жыл бұрын
setOparnds는 객체를 생성한 후, 값을 바꾸고 싶을 때 사용할수도 있고 그걸 사용하지 않고 다시 new를 이용해 값을 바꿀 수 있습니다.
@RankingandFacts5 жыл бұрын
thanks
@hsh45206 жыл бұрын
19.1.8(화) 87강
@오빈-k6k2 жыл бұрын
부모의 특성을 자녀에게 상속~
@이일훈-t8x7 жыл бұрын
후엥 어지러워라
@카카신신4 жыл бұрын
그렇다면 super 을 쓰게되면 상위클래스에 기본 생성자를 따로 작성하지 않아도 되는건가요?
@dongwankim26674 жыл бұрын
네
@jaewonup4 жыл бұрын
영상초반에 SubstractionableCalculator 을보면 안에 변수가 있으면 기본생성자가 생성안되어서 오류가 생긴다고했는데 SubstractionableCalculator 에 (int left, int right)변수가 들어가있으니 기본생성자가 생성안될텐데 왜 에러가 안뜨나요? 기본생성자는 부모클래스에만 존재하는건가요?
@njdjwgu4 жыл бұрын
super 키워드를 사용하면 부모 클래스의 생성자를 불러와서 자신의 변수를 설정하는거기 때문에 부모 클래스의 기본 생성자를 호출 할 필요가 없게 되고, 부모 클래스의 기본 생성자를 호출하지 않기 때문에 오류가 안생기는 거에요
@choing86047 жыл бұрын
그런데 왜 자바는 기본 생성자를 하나 만들어야한다는 점을 알면서 자동으로 안 만들어 주는거죠?
@joelee76447 жыл бұрын
기본 생성자를 만드는게 의무가 아니니깐요.
@xorbsdut7 жыл бұрын
기본 생성자는 안 만들어도 보이지만 않을 뿐 생성되어있는 걸로 아는데 아닌가요? YB Lee
@pongpong27645 жыл бұрын
@@xorbsdut 생성자를 만들지 않을 경우 기본생성자가 만들어 지고, 생성자를 명시적으로 만드는 경우에는 기본생성자를 만들어 주지 않는 것으로 알아요. 바로 이전 강의에서는 파라미터가 할당되지 않은 기본생성자와 파라미터를 지정한 생성자 모두를 명시적으로 만들어 주는 경우가 있었어요. 어느 때고 기본생성자를 만든다면, 파라미터가 부여된 생성자를 만들면서 기본생성자를 명시적으로 만들어 줄 이유가 없지요.
@쉽지안쉽지5 жыл бұрын
@@pongpong2764 이게 정답이네요 자바는 생성자를 따로 지정해놓지 않으면 기본생성자가 만들어집니다 눈에만 안 보일 뿐