묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨김영한의 실전 자바 - 기본편
상속 메모리 구조에 대해서 질문
상속에서 자식 인스턴스를 생성하면 메모리의 힙 영역에 자식 인스턴스를 비롯한 부모 인스턴스가 같이 생성되는 걸로 알고 있는데요. Parent와 Child가 있을 때 new Child()를 하면 Child 인스턴스 하나, Parent 인스턴스 하나 이렇게 총 두개가 생성되는 건가요? 아니면 인스턴스는 하나만 생성되는데 그 내부에서 Parent 타입과 Child 타입으로 구분되는 건가요?
-
해결됨김영한의 실전 자바 - 기본편
인스턴스 타입을 부모로해도 자식의 오버라이드 메서드가 호출되나요?
안녕하세요! ElectricCar electricCar = new ElectricCar(); electricCar.move();이렇게 하면 호출한 electricCar의 타입은 ElectiricCar라서 인스턴스 내부의 ElectricCar 타입에서 시작한다고 하셨습니다.그래서 electricCar.move();를 실행하면 ElectricCar 의 move() 메서드가 실행돼서전기차를 빠르게 이동합니다.이렇게 전기차로 출력이 됩니다.Car electricCar = new ElectricCar(); electricCar.move();그럼 이렇게 타입이 Car타입이면 인스턴스 내부의 Car타입에서 move()메서드를 실행시켜 "차를 이동합니다."가 출력될 것이라고 생각했는데 전기차를 빠르게 이동합니다.여기서도 전기차를 빠르게 이동합니다.가 출력됩니다.어째서 Car타입에서 move()메서드를 실행하지 않고 ElectricCar의 move()메서드를 실행하게 되는건가요?감사합니다!!😊
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
생성자 안에 메소드...?!
안녕하세요, 선생님...ㅎ 갑작스럽게 생각난 질문인데요...ㅎ 제가 예시로 아래처럼 클래스를 만들어 봤는데, 혹시 상속받은 클래스의 super(); 생성자 안에 이렇게 메소드도 넣을 수 있나요? 자바를 공부하면서 지금 여러 소스 코드들을 보고 있는데, 어느 소스코드는 super(); 생성자 안에 메소드를 집어 넣은 경우가 있더라구요?! 만약에 이렇게 만들 수 있다면, 언제 어느 때 가능할까요?클래스는 정말 제가 생각나는대로 적어서 컴파일 에러 같은 건 생각하지 않았습니다. 부디 너그럽게 봐주셨음 합니다...ㅎclass Kid extends SomethingAwesome { Kid(int age) { super(comment(age)); // super() 생성자 안에 comment메소드 삽입 } public String comment(int age) { String saySometing = ""; if (age > 3 && age < 7) { saySomething += "엄마, 과자 사줘!"; } else if (age >= 7 && age < 11) { saySomething += "엄마, 이젠 로보트 사줘!"; } return saySomething; } public static void main(String[] args) {...} // 메인 메소드 실행 }또한 일반적인 생성자 (Constructor)를 만들 때도, 생성자 안에 전달 값외에도 메소드를 넣을 수 있는가요? 이것도 마찬가지로 위에 예시로 코드를 적은 것 처럼 제 나름대로...ㅎ 써봤습니다...ㅎ 위의 예시 처럼 정말로 생성자 안에 메소드를 넣는게 가능한지 궁금해서 약간 무리수를 두면서(?) 코드를 적어봤습니다..ㅎ 이것도 너그럽게 봐주세요...ㅎ 감사합니다 : )class ThankYouNote { // 제가 생각해도 좀 많이 이상하지만, // 메소드를 이렇게 선언해서 do = thanks(); // this.do = do; 이렇게는 많이 무리수죠? ㅠㅠ // 저렇게 위 클래스 처럼 super 생성자 안에 메소드를 넣는건 처음봐요 ㅠㅠ ThankYouNote() { thanks(); // this(thanks()); // 너무 많이 무리수 인듯하지만 일단 적어봤습니다...ㅠㅜ } public void thanks() { System.out.println("나도코딩 선생님, 감사합니다. :)"); } public static void main(String[] args){ ... } // 메인 메소드 실행 }
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
super를 사용하는 건, 부모와 자식 클래스의 파라미터 이름이 꼭 같아야하나요?
OOP 상속 부분 강의에서 보면 부모클래스의 파라미터 이름과 자식 클래스 파라미터 이름을 다 같게 쓰시더라구요.혹시 변수 이름 구분을 하면 오류가 나는지 한번 구분을 해보았는데, super뒤의 부모 클래스 파라미터를 적는 부분에서 오류가 나더라구요.두 개를 다르게 지정하면 안되는건가요? 예를 들어 강의에 나온 대로 받은 입력을 2배하는 클래스, 4배하는 클래스를 만들었을 때class Timestwo { int number1; Timestwo(this.number1); int calculate(){ return this.number1 * 2; } } class Timesfour extends Timestwo{ Timesfour(int number2) : super(number1); int calculate(){ return super.number1 * 4; } }밑에서 5번째줄, Timesfour(int number2) : super(number1) 부분에서 number1아래에 빨간줄이 생겨요.저는 Timesfour(int number2)는 Timesfour라는 클래스의 파라미터를 받는 거라 아무 이름이어도 된다고 생각했고,super( )안은 부모클래스(Timestwo)의 파라미터를 받는거라 number1을 써야한다고 생각했거든요.그런데 안되더라구요...?제가 어디를 잘못 이해하고 있는걸까요?
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
멤버변수 뿐만 아니라 메소드도 그대로 상속되는 것은 알겠는데요. 질문이 있습니다
# 일반 유닛 class Unit: def __init__(self, name, hp): self.name = name self.hp = hp print(f"{name} 유닛이 생성 되었습니다.") print(f"체력 {hp}") # 공격 유닛은 일반 유닛을 상속받아서 만들어짐 class AttackUnit(Unit): def __init__(self, name, hp, damage): Unit.__init__(self, name, hp) self.damage = damage print(f"공격력 {damage}")이렇게 출력이 되는데, 저는 공격유닛은 체력 50, 공격력 16으로 출력하고 싶은데 어떻게 하나요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
추상클래스, 인터페이스에 대해 질문이 있습니다!
제가 정리한 내용은 추상클래스는 new 클래스를 통해 직접 객체를 생성할 수 없으며, 상속을 위한 클래스이고인터페이스는 구현체에 대한 메소드를 오버라이드 하는 것으로 이해하였는데.. 첫번째 질문은 두 개의 역할이 중복되는 것이 아닌지에 대한 질문입니다. 두 개의 역할 모두 구현체에게 메소드를 주입하는 것인데 굳이 구분한 것인지에 대한 질문입니다.두번째 질문은 일반 클래스의 상속이 있는데 굳이 추상클래스를 사용 하는 점 입니다. 제 생각으로는 부모 객체의 사용을 막기 위해 추상클래스로 변경을 한 것인지? 아니면 다른 이유가 있는 것인지에 대해서도 궁금합니다.
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
상속
class unit: def __init__(self, name, hp, speed): self.name = name self.hp = hp self.speed = speed print("{} unit creation complete".format(name)) class AttackUnit(unit): def __init__(self, name, hp, speed, damage): unit.__init__(self, name, hp, speed) self.damage = damage print ("{} 생성 완료.".format(self.name)) print ("HP {0}, Damage {1}".format(self.hp, self.damage)) unit 클래스에서 상속 받을때 __init__(self, name, hp, speed, damage):을 다시 다 적는 이유가 뭔가요? 밑에 줄에 unit.__init__(self, name, hp, speed) 이 있으면 굳이 적을 필요 없다고 생각했는데 지우니까 오류가 뜨네요 왜 그런지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
itemService.saveItem(book) 질문 드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 안녕하세요 강사님! 다름이 아니고 Book book = new Book(); book.setName(form.getName()); book.setPrice(form.getPrice()); book.setAuthor(form.getAuthor()); book.setIsbn(form.getIsbn()); book.setStockQuantity(form.getStockQuantity()); itemService.saveItem(book); itemService.saveItem(book) 호출을 했는데 Insert 시 어떻게 Book 객체의 멤버를 읽어서 사용하는지 아니면 애초에 1차캐시에 해당 참조값만 관리되어서 업캐스팅과 관계없이 내부에 있는 멤버에 접근이 가능한건지 궁금해서 질문드립니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요 상속관계 관련해서 질문이 있습니다!
안녕하세요! 열공중인 학생입니다 :) 현재 JPA 기본 강의를 보며 토이프로젝트를 진행하고 있습니다! 그런데 상속관계 관련해서 적용해보려 하는 중 잘 해결이 되지 않는 부분이 있어 질문 드립니다! 기본적으로 유저로 가입하고 이후 프리랜서로 등록하는 경우에만 프리랜서 테이블에 추가되도록 하고 싶었습니다. 그래서 유저 엔티티를 부모타입으로 두고 이를 상속(조인전략)받는 프리랜서 엔티티를 만들었습니다. 그런데 자식타입인 프리랜서로 조회하지 않고 부모타입인 유저로 조회하는데도 하위 타입인 프리랜서 테이블이 조인됩니다. 유저 정보만 조회하고 싶은 경우가 많을 것 같은데 설계 자체가 잘못되었나 싶네요... 혹시 부모타입으로 조회할 때는 자식 타입이 조인되지 않도록 하는 방법은 없을까요? 구글에 검색해도 잘 나오지가 않네요ㅠ 아니면 아예 유저랑 프리랜서를 일대일 연관관계로 지연로딩 설정하는게 나은 방법일까요 근데 뭔가 연관관계로 풀기에는 자연스러워 보이지가 않아서요,,,
-
미해결스프링 핵심 원리 - 고급편
구체 클래스 기반 프록시 예제2
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용 : 2분11초~] 이 케이스에서는 TimeProxy가 ConcreteLogic를 상속했기 때문에 이미 ConcreteLogic에 대한 정보(super)를 갖고 있는 것으로 보이는데, 멤버변수에 ConcreteLogic를 추가하신 의도가 있으신 건가요? 인터페이스를 사용할 때에는 손뼉을 쳤지만 구체 클래스 기반 프록시를 보니까 갑자기 위화감이 들어서 질문 드립니다....
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
어노테이션 상속 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용] 제가 이해하고 있는게 맞는지 질문드립니다.GetMapping 어노테이션의 소스코드를 보면 위에 RequestMapping이라고 어노테이션이 붙어 있습니다. 통상적으로는 메타 어노테이션 이외에 어노테이션은 어노테이션 위에 붙이는게 아니지만, 스프링에서는 어노테이션 위에 붙어 있는 메타 어노테이션이 아닌 어노테이션은 현재 어노테이션이 마치 상속받듯이 사용할 수 있게 해놓았다. 그렇기 때문에 GetMapping이 붙어 있는 대상은 마치 RequestMapping이 붙어있는 것과 같다. 이렇게 이해했는데 맞나요?
-
미해결스프링 데이터 JPA
엔티티를 상속받는 DTO가 일반적인가요?
안녕하세요. 기선님 강의 너무 재밌게 잘 보고 있습니다. 질문드릴것이 있는데요 그전에 상황을 설명하면 이렇습니다. (이해하기 쉬우시게 한글로 적겠습니다) '병원' , '환자' 라고 하는 두 엔티티가 있습니다. 환자는 병원을 참조하고 있습니다(FK) @Entity@Getter @Setter@Builder @EqualsAndHashCode(of = "id")@AllArgsConstructor @NoArgsConstructorpublic class 병원 { @Id @GeneratedValue private Long id; private String name; . . . . // 환자 수 @Transient private Integer 환자수; } @Entity@Getter @Setter@EqualsAndHashCode(of = "id")@AllArgsConstructor@NoArgsConstructorpublic class 환자 { // 환자 아이디 @Id @GeneratedValue @Column(name = "PAT_ID") private Long id; // 병원 @ManyToOne @JoinColumn(name = "HOSP_ID") private 병원 병원; . . . .} 위와 같이 두 엔티티가 존재하는데 병원 리스트를 검색하면서 각 병원에서 수용중인 환자 수를 같이 하고 불러오고 싶습니다. 이를테면 환자수가 1명이상인 병원목록을 불러온다했을때 이걸 SQL로 작성하면 SELECT h.*, ( SELECT COUNT(*) FROM patient WHERE hosp_id = h.hosp_id ) as '환자수'FROM hospital hWHERE ( SELECT COUNT(*) FROM patient WHERE hosp_id = h.hosp_id ) > 1; (사실 이게 효율적인 SQL인지도 모르겠습니다만, 전 이렇게 보통 씁니다..) 처럼 작성할 수 있을건데요 이럴때 세가지 질문이 있습니다. 1. 병원 엔티티 클래스에 '환자수' 라는게 있는게 일단 맞는지 부터가 문제입니다. 병원 리스트를 조회할때 환자수가 몇명인지 정보도 같이 필요한 페이지도 있고 필요가 없는 페이지도 있습니다. 단, 환자수 정보가 필요할때는 '몇명 이상의 환자가 있는 병원 목록'과 같이 (위 SQL과 같이) where 절에 조건도 같이 붙게 됩니다. 환자수는 DTO로 따로 빼는게 맞을까요? 2. (1번질문에서 따로 빼는게 좋겠다고 하였을때) 환자수를 포함하는 병원DTO를 만든다고 했을때 사실 그 DTO는 병원의 모든 필드가 필요 합니다. 그래서 하려면 아래처럼 병원을 상속받는 식이 되어야 할텐데 이렇게 DTO 클래스가 엔티티 클래스를 상속받아도 문제가 없고, 이렇게 사용하는게 일반적으로 현업에서도 많이 있는 일인가요? public class 병원출력DTO extends 병원 { private Integer 환자수;} 3. 제가 하고자하는 것 ( 엔티티에 있는 모든 정보 + 서브쿼리를 통한 추가정보를 같이 불러오고 서브쿼리를 이용한 WHERE절 ) 이 굉장히 일반적으로 많이 쓰이는 것이라 분명 JPA 프로그래밍으로 충분히 쉽게 하는 방법이 이미 있을것 같은데 지식의 끊이 짧다보니 어떤 방법을 써야하는지 감을 못잡겠습니다. SELECT h.*, ( SELECT COUNT(*) FROM patient WHERE hosp_id = h.hosp_id ) as '환자수'FROM hospital hWHERE ( SELECT COUNT(*) FROM patient WHERE hosp_id = h.hosp_id ) > 1; 이런 것을 하기위해 제가 뭘 찾아보고 공부하면 되는지 키워드나 팁를 알려주실수 있을까요 (QueryDsl을 활용하면 될것 같긴한데.. )
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
상속과 속성 관련 질문 드립니다
class Zero extends Human { constructor(type, firstName, lastName) { super(type); this.firstName = firstName; this.lastName = lastName; } sayName() { super.breathe(); alert(`${this.firstName} ${this.lastName}`); } } 이 class 선언에서 질문이 있습니다! 1. 이미 super(type); 으로 type 값을 부모 요소에서 가져오기로 결정했는데, 굳이 생성자에서 argument로 type을 받는 이유가 있을까요? 2. 또, 제가 dart 언어를 공부하다 와서 헷갈리는 부분일수도 있지만, JS에서 class 내의 property를 설정해주기 위해서는 꼭 생성자의 argument로 넘겨주어야 하는 건가요? 3. 이어서 첫번째 질문으로 돌아가자면, class 선언문 내에 const type = super(type); 이런 식으로 property를 설정해주고 생성자에서 super(type);을 빼주면 안될까요? 이상 3가지 질문을 드리고 싶습니다. 좋은 강의 감사드립니다!
-
미해결스프링 핵심 원리 - 기본편
빈 조회시 부모 타입으로 조회하면, 자식 타입도 함께 조회된다는 것에 질문있습니다.
안녕하세요 김영한 개발자님. 친절하고 상세한 강의 너무너무 감사하고 로드맵 정독중입니다. 이외에도 스프링에 관련된 등 다른 강의들도 찍어주시면 너무 감사하겠습니다. 본 강의를 잘 듣고 있다가 '스프링 빈 조회 - 상속 관계' 영상에서 질문이 있는데요! 부모(DiscountPolicy) 빈을 호출했을 때 자식(RateDiscountPolicy, FixDiscountPolicy)이 둘 이상이면 에러가 발생한다. 에서요. 의미적으로는 implements 로 인터페이스를 구현했으므로 부모-자식인 것은 알겠는데, 사실 엄밀하게 상속은 extends 로 이어진 것을 말하는 것이 아닐까요? 영상에서도 예시코드를 들기 전에 extends Object 로 사실 다 이어져 있다고 하셨는데, 강의를 보면서 의아했습니다. 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상속관련 문의 드립니다.
안녕하세요. 좋은 강의 감사합니다. 몇가지 질문을 드리겠습니다. 아래와 같은 테이블 연관관계가 있는 경우 외래키가 있는 테이블에서 상속관계를 사용하고자 할때 어떤식으로 하면 될까요? 상속은 슈퍼타입과 서브타입일경우 사용하는걸로 아는데 indic_bas_four_ern 테이블은 RIC 컬럼이 PK에 추가되어 있기 때문에 indic_bas 테이블 상속이 불가능하지 않나요? 복합키일 경우 기존 복합키 구현과 상속일 경우 복합키 구현은 똑같이 처리하면 될까요? 현재는 indic_bas 와 indic_bas_one_ern, indic_bas_two_ern, indic_bas_three_ern 는 OneToOne으로, indic_bas 와 indic_bas_four_ern 는 ManyToOne 으로 설정하였습니다. 감사합니다.
-
해결됨홍정모의 따라하며 배우는 C++
궁금 합니다
상속을 할수있다면 이전 강의에서 설명해주신 구성 ,집합 관계 처럼 설계를 하지않고 다 상속 해주면 더 좋은것 아닌가요? 상속을 할수있는데 구성,집합 ,의존등 관계를 써서 설계를 하는 이유가 따로 있나요? (그냥 강의 듣다가 문득 생각이 들어서 질문 남깁니다)