월 14,300원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
스트림 .toList와 .collect의 차이
안녕하세요, 우선 좋은 강의 정말 감사드립니다! 나도코딩님 유튜브로 파이썬 강의 듣다가개발자에 꿈이 생겨 현재 부트캠프에서 백엔드를 배우고 있습니다.강의를 듣던 중 궁금한 점이 생겨 여쭤보려고 합니다.스트림 챕터에서 리스트로 저장할 때 .collect를 사용해서 만들 수 있다고 하셨는데혼자 해보다가 collect가 생각이 나지 않아 collect를 사용하지 않고 바로 뒤에 .toList를 붙였는데도정상 작동 하는 것 같습니다.collect를 썼을 때와 안 썼을 때의 차이가 있을까요?또, list.stream().forEach(System.out::println) 를 스트림으로 안바꾸고 list.forEach(System.out::println)로도 사용할 수 있는 이유가 있을까요??//강의 내용 List<String> langListStartsWithC = langList.stream() .filter(x -> x.contains("c")) .map(String::toUpperCase) .collect(Collectors.toList()); langListStartsWithC.stream().forEach(System.out::println); //혼자 해본 코드 List<String> c = Arrays.stream(langs) .filter(x -> x.contains("c")) .map(String::toUpperCase).toList(); c.forEach(System.out::println); List<String> list = langList.stream() .filter(x -> x.contains("c")) .map(String::toUpperCase).toList(); list.stream().forEach(System.out::println); // list.forEach(System.out::println) 작동
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
super사용해봤는데 이해가 잘 안되네요
저는 super를 부모 클래스의 어떤 것을 사용하는 것으로 이해했습니다. package nodocoding; public class _18_ClassMethod { public static void main(String[] args) { Animal [] animals = new Animal[2]; animals[0] = new Animal(); animals[0].age = 10; animals[1] = new Lion(); ((Lion)animals[1]).name = "lion"; System.out.println(((Lion)animals[1]).name); ((Lion)animals[1]).cry(); } } class Animal { int age; String species; void cry (){ System.out.println("동물소리를 내며 울어요."); } } class Lion extends Animal{ String name; void lionCry() { super.cry(); System.out.println("라이언의 울음소리는 크아앙"); } } 제가 생각한 것은((Lion)animals[1]).cry();라고 코드를 작성했을 때결과가"동물소리를 내며 울어요." "라이언의 울음소리는 크아앙" 이라고 뜰 줄 알았는데 "동물소리를 내며 울어요."만 뜨더라구요.예상과 다르네요 ㅠ 왜 이런 걸까요??
- 해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
_Quiz_10 번 문제
저는 Customer 클래스를 선언할 때 name, age를 private 으로 선언하고 Getter, Setter를 이용하여 값을 접근할려고 짯습니다. 근데 map() 을 하는 과정에서 아래와 같은 오류가 떠서 setName()을 그냥 String 반환값으로 고쳐서 했더니 에러가 해결이 됐습니다. 근데 왜 이런 오류가 났는지 이해가 안갑니다 public class _Quiz_10 { public static void main(String[] args) { List<Customer> customerList = new ArrayList<>(); customerList.add(new Customer("챈들러",50)); customerList.add(new Customer("레이첼", 42)); customerList.add(new Customer("모니카", 21)); customerList.add(new Customer("벤자민", 18)); customerList.add(new Customer("제임스", 5)); System.out.println("미술관 입장료"); System.out.println("=================="); customerList.stream() .map(x->x.getAge()>=20 ? x.setName(x.getName() + " 5000원"):x.setName(x.getName()+ " 무료")) .forEach(System.out::println); } } class Customer{ private String name; private int age; public Customer(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
- 해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 11을 if~else 대신 swtich문으로 풀어도 똑같은 결과가 나오는데, 취사선택의 문제일까요??
package chap_11; public class _Quiz_11 { public static void main(String[] args) { //todo 사용자 정의 예외 클래스(extends Exception을 통해 가능) //todo 예외 객체 생성 메시지가 2개인 것을 보아, 클래스도 2개를 만들어야 할듯...? //todo 경우의 수가 3가지니까 if~else문으로 작성 int errorCode = 0; try { switch (errorCode) { case 0: System.out.println("상품 구매를 완료하였습니다."); break; case 1: throw new NotOnSaleException("상품 구매 가능 시간이 아닙니다."); case 2: throw new SoldOutException("해당 상품은 매진되었습니다."); default: throw new Exception("이외의 에러코드는 여기서 처리하였습니다."); } } catch (NotOnSaleException e) { System.out.println(e.getMessage()); System.out.println("상품 구매는 20시부터 가능합니다."); } catch (SoldOutException e) { System.out.println(e.getMessage()); System.out.println("다음 기회에 이용해주세요."); } catch (Exception e) { System.out.println(e.getMessage()); } } } class NotOnSaleException extends Exception { public NotOnSaleException(String msg) { super(msg); } } class SoldOutException extends Exception { public SoldOutException(String msg) { super(msg); } }위의 errorCode를 각각넣으면 퀴즈의 요구사항대로 정상적으로 출력이 됩니다. 또한, int errorCode = 99; 같이 default에 해당하는 다른 값을 넣어도 정상적으로 다음과 같이 출력이 되구요:제목과 같이 if~else문이나 swtich문으로 선택하는 것은 개인의 자유인가요? 아니면 특정 상황에 따라 다른가요?
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
b1.appendModelName 까망이(최신형)
void appendModelName(String modelName) { this.modelName += modelName }인데 어떻게 '까망이 + 까망이' 가 되는게 아니라b1.appendModelName 에 있는 (최신형) 이 붙게 되는걸까요....? append가 인텔리제이에서 제공하는 어떤 함수 같은건가요???
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
메소드 퀴즈6
/** 기능 : 인덱스번지부터 *로 개인정보를 가리는 메소드 * 매개변수 : String data, int index 리턴타입 : 처리된 개인정보 => String * 메소드명 : getHiddenData */ public static String getHiddenData(String data, int index) { String hiddenData = data.substring(0, index); for(int i = 0; i < data.length() - index; i++) { hiddenData += "*"; // System.out.print("*"); // 이렇게 하니까 *표가 앞으로 가버림.. 왜 그럴까요? } return hiddenData;가운데 주석처리한대로 *를 프린트하니까 ** 이름 : 나이런 식으로 출력이 됩니다. String hiddenData 에서 공개부분만큼만 자르고, 뒤에 비공개부분만큼 println 에서 line 빼고, for문 반복하면 **이 뒤로 붙어야 할 것 같은데 이해가 안됩니다.. 복습겸 문제풀기 + 강의 다시보기 까지 해당 문제를 3번은 풀었는데도 코드를 이해하고 푸는게 아니라 답이 뭐였더라...를 더듬 거리면서 푸는거같아요..
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
안녕하세요 지난 시간에 배운 인터페이스(후반전)을 함수형 인터페이스로 만들어보았습니다.
(메인 클래스 부분 아래로 내려가지지 않아서 실행 결과를 여기에 먼저 올립니다 😅)참고로, 함수형 인터페이스를 사용할 때는 아래와 같이 함수 시그니처(함수 이름, 반환형, 파라미터 타입)만 동일하고 바디 부분은 달라도 정상적으로 실행이 되더군요.📋Reportable 인터페이스package practice; @FunctionalInterface public interface Reportable { void report(int time); // 신고 }📋Detectable 인터페이스package practice.detector; @FunctionalInterface public interface Detectable { String name = "감지자"; // 인터페이스도 필드를 가질 수 있음 void detect(); // 감지 }💻NormalReporter 클래스package practice; public class NormalReporter implements Reportable { @Override public void report(int time) { System.out.println(time + " 초 동안 일반 화재 신고를 진행합니다."); } }💻VideoReporter 클래스package practice; public class VideoReporter implements Reportable { @Override public void report(int time) { System.out.println("직전 " + time + "초 영상과 함께 신고를 진행합니다."); } }💻FireDetector 클래스package practice.detector; public class FireDetector implements Detectable{ @Override public void detect() { System.out.println("일반 성능으로 화재를 감지합니다."); } }💻AdvancedFireDetector 클래스package practice.detector; public class AdvancedFireDetector implements Detectable{ @Override public void detect() { System.out.println("향상된 성능으로 화재를 감지합니다."); } }💻메인 클래스package practice; import practice.detector.Detectable; public class practice { public static void main(String[] args) { //* 함수형 인터페이스 실행 Reportable reportableNormal = (time) -> System.out.println(time + " 초 동안 일반 화재 신고를 진행합니다."); Reportable reportableVideo = (time) -> System.out.println("직전 " + time + "초 영상과 함께 신고를 진행합니다."); Detectable detectableFire = () -> System.out.println("일반 성능으로 화재를 감지합니다."); Detectable detectableAdvancedFire = () -> System.out.println("향상된 성능으로 화재를 감지합니다."); reportbyNormalReporter(reportableNormal, 20); reportbyVideoReporter(reportableVideo, 10); detectbyFireDetector(detectableFire); detectbyAdvancedFireDetector(detectableAdvancedFire); } public static void reportbyNormalReporter(Reportable reporter, int time) { reporter.report(time); } public static void reportbyVideoReporter(Reportable reporter, int time) { reporter.report(time); } public static void detectbyFireDetector(Detectable detector) { detector.detect(); } public static void detectbyAdvancedFireDetector(Detectable detector) { detector.detect(); } }
- 해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
구상클래스에서 인터페이스 변수를 선언한 이유가 혹시 다형성과 관련이 있나요?
클래스의 상속과 관련된 다형성은 부모객체로 인스턴스를 생성하여 부모클래스의 메소드와 자식클래스 메소드 2가지를 업/다운캐스팅하여 자유롭게 호출할 수 있지만, 단일상속이라는 한계때문에 다른 부모클래스의 메소드는 호출할 수가 없잖아요? 그래서 인터페이스가 존재하는 이유구요.마찬가지로, 인스턴스를 생성할 때 다형성을 활용하여 인터페이스 객체(부모 객체)로 생성할 수는 있지만, 이것은 ISP(Interface Segregation Principle)원칙에 따라 detect(), report() 2개의 메소드를 호출하려면 Detectable, Reportable 객체 2개를 생성해야 하기 때문에 메모리가 효율적으로 관리되지 못하는거구요. 따라서 구상클래스인 FactoryCam에서 인터페이스 변수를 직접 생성하고 setter함수로 필요한 인터페이스 변수를 주입한 다음(Dependency Injection) , 주입당한 객체는 인터페이스에 의존하기 때문에(Reportable, Detectable) 동시에 기능이 다른 2가지 메소드를 호출할 수 있는거구요.(Dependency Inversion Principle) ... 과정을 이해하였지만 말로 풀어내니까 굉장히 장황하군요 사실 이 부분은 인터페이스 문법이라기보다는 디자인 패턴과 관련이 있지 않나싶습니다.
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
메소드 오버로딩 강의 질문합니다
안녕하세요 선생님 파이썬 기본 문법 강의부터 잘 들었던 학생입니다 ㅎㅎ메소드 오버로딩 강의를 듣다가 메소드 오버로딩의 목적이 잘 이해가 가지 않아서 구글링을 해보았는데요,TCP 스쿨 문서에 '이러한 메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약할 수 있습니다.또한, 메소드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 됩니다.메소드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나입니다.'라고 답변이 나와있어 몇가지 질문드립니다.메소드 오버로딩은 메소드에 사용되는 이름을 절약하는 것이 있고 다른 목적이 또 있을까요?여기서 객체 지향 프로그래밍의 특징 중 하나인 '다형성'이라고 나오는데 다형성을 쉽게 이해할 수 있는 방법이 있을까요?메소드 오버로딩의 대표적인 예로는 println() 메소드를 들 수 있다고하는데 자바 프로그래밍 언어를 창시할때 println()을 만들었을시, 해당 함수를 의미하는 것일까요?항상 너무 감사하게 잘 듣고있습니다 친절하게 알려주셔서 정말 감사합니다 선생님 태풍 조심하시고 항상 건강하시고 행복한 하루 보내시길 바랍니다 :)
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
영어버전
갑자기 업데이트 버튼을 눌렀더니 한글버전으로 나와요. 영어버전으로 어떻게 설정하나요?
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
모르고 src 파일을 삭제해버렸어요
어떻게 해야 src 파란색 파일을 다시 생성할 수 있나요? ㅜ
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
유튜브에서 제공되는 것 이후의 나머지 강의에 대한 소스코드는 어디서 받을 수 있나요?
9시간 분량 이후의 결제 후 강의 분량에 대한 소스코드는 어디서 받을 수 있나요?그리고 현재 클래스 강의까지 거의 수강 다해가는 중인데강의 제목이 기본편이라 이후에 심화편은 언제 나오는지 궁금합니다
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
형변환과 업캐스팅/다운캐스팅
정수형에서 실수형으로// int > long > float > double (정밀한 데이터 = 자동 형변환)실수형에서 정수형으로// double > float > long > int (큰 -> 작은 = 수동 형변환) 데이터 단위 형변환은 업캐스팅/다운캐스팅과 관련이 없는 개념인거죠? 뒤에까지 듣고 앞을 다시 듣다보니 int는 작은녀석이고, double은 큰범위의 녀석이니 형변환이 필요한거 아닌가? (반대는 큰녀석을 작은녀석으로 형변환 하니 자동으로 된다)하고 의문이 들어서요 업캐스팅/다운캐스팅은 클래스, 메소드가 있는 상황에서 발생하는거죠?
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
쓰레드 질문입니다!
안녕하세요? Thread 질문하려 합니다.직원 청소 시작 (Thread) 메소드는 CleanThread에서 사용하여(즉 Thread 클래스 상속) 작성하였는데사장 청소 시작은 Thread 클래스에서 상속 받지 않고 바로 Thread 클래스에서 메소드를 작성한 이유를 알고 싶습니다!
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
질문있습니다
convertUSD(converter, 2);강의 내용 중 위의 코드가다시 아래의 코드로 변하던데, 이부분이 이해가 되지 않습니다. convertUSD(public void convert(int USD) { System.out.println(USD + " 달러 = " + (USD * 1400) + " 원"); }, 2);converter은 객체이고, 아래의 코드는 함수인데 왜 이꼴이 되는걸까요?
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
chap_04 continue 문의
int max = 20; // 최대 치킨 판매 수량 int sold = 0; // 현재 치킨 판매 수량 int noShow = 17; // 대기번호 17번 손님이 노쇼 for (int i = 1; i < 50; i++) { System.out.println(i + "번 손님, 주문하신 치킨 나왔습니다."); sold++; // 판매 처리 //손님이 없다면? (noShow) if (i == noShow) { System.out.println(i + "번 손님, 노쇼로 인해 다음 손님에게 기회가 넘어갑니다."); continue; } if (sold == max) { System.out.println("금일 재료가 모두 소진되었습니다."); break; } } System.out.println("영업을 종료합니다."); 여기서 질문이 하나 있습니다.코드에서도 for문안에 들어오면서 바로 sold부분이 증가하는데 noshow부분에서 sold가 증가하지 않아야 하는거 아닐까요?
- 해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
equals() 와 getter의 차이
public class _Quiz_09 { public static void main(String[] args) { List<Student> list = new ArrayList<>(); list.add(new Student("유재석","파이썬")); list.add(new Student("박명수","자바")); list.add(new Student("김종국","자바")); list.add(new Student("조세호","C")); list.add(new Student("서장훈","파이썬")); System.out.println("자바 자격증을 보유한 학생"); System.out.println("========================"); for (Student student : list) { if (student.getCertification() == "자바"){ System.out.println(student.getName()); } } } } class Student{ private String name; private String certification; public Student(String name, String certification) { this.name = name; this.certification = certification; } public String getName() { return name; } public String getCertification() { return certification; } }저는 Student 클래스를 생성할 때 getter를 만들어서 getter로 자바 자격증을 찾는 로직을 짯는데equals()와 getter를 비교했을때 어느 방법이 성능면이나 이점이 있는지 알 수 있을까요 ?
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
창 띄우기
이 폴더 창을 모르고 없앴는데 다시 어떻게 띄우나요?
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
this의 사용에 대해
안녕하세요. 나름대로 혼자 코드를 짜고 문제를 풀어보았습니다. 근데 SpeedCam의 코드에서 저의 코드는 package camera2; import detector.*; import reporter.*; public class SpeedCam extends Camera { private Detectable detect; private Reportable report; public void setDetect(Detectable detect) { this.detect = detect; } public void setReport(Reportable report) { this.report = report; } public void showMainFeature() { System.out.println("속도 측정, 번호 인식"); } public void detect() { detect.detect(); } public void report() { report.report(); } } 이러합니다. 정상적으로 목표 결과도 얻었습니다 근데 강사님의 코드는 public void detect() { this.detect.detect(); } public void report() { this.report.report(); } 이렇게 다른 부분이 존재하는데this는 왜 필요한걸까요?
- 미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
질문있습니다
아래 코드에서 detect메소드는 public으로 해줘야 에러가 안뜨더라구요. 무조건 정의는 public으로 해줘야 하는 건가요? package detector; public class AcciedntDetector implements Detectable{ public void detect() { System.out.println("교통 사고를 감지합시다."); }; }