안녕하세요 얄코님 객체지향 프로그래밍 섹션 수강 후 디자인 패턴 섹션을 수강하려 하는데 notion의 샘플 코드를 보면 Creational Patterns Structural Patterns Behavioral Patterns 으로 분류하여 나열해놓으셨는데, 강의 순서는 위의 분류와 상관없이 나열되어 있더라구요. 강의 순서에 의도가 있을까요? 별다른 의도가 없는 경우 위에서 분류된 패턴별로 강의를 들어볼까 하여 질문드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 서비스는 복잡한 규칙(비즈니스 로직)을 계산하고 판단 한다고 생각되는데 왜 이건 역할과 구현체를 나눌까요? 지금까지 설명으로 봤을때 다형성의 의미는 사실 저장소에 국한되서 설명이되고 있는것 같아서요. 저장소 자체는 외부랑 소통하는 통로로써 db일지 다른 외부 시스템 연동일지에 따라 어떤 구현체를 사용할지 모르니 사용한다고 쳐도 서비스 비즈니스 계층에서는 로직을 변경하는거지 어떤 다른 구현체가 있지는 않아서 굳이 분리하는 이유가 궁금합니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. '클래스 도입'이라는 강의 16:25 쯤 강사님이 "마치 method을 호출하고 반환한 것처럼 끝나고 나면 참조값을 딱 반환합니다. " 라고 하셨는데 매서드를 호출하고 반환할 때 원래 위치로 돌아가는 것이 참조값을 반환해서 라고 이해하면 될까요? 무슨 말인지 잘 이해가 안 됩니다.
운영체제 관점의 실제 모니터 명세는 조건변수를 추가할 수 있습니다. synchronized는 자바가 구현한 모니터인데 조건변수의 추가가 불가능해서 생산자 소비자 문제를 해결할 수 없습니다. ReentrantLock은 자체적으로 구현한 락을 사용하지만 그 락의 구현은 실제 조건변수를 추가할 수 있는 모니터의 명세를 따르고 있어 모니터를 구현했다고 할 수 있습니다. 모니터는 CAS를 내부적으로 사용합니다. CAS를 반복문으로 돌리며 바쁜대기를 하거나 Park로 락을 획득하고 반환합니다. 원자적 연산도 CAS를 구현하지만 단순 속도가 synchronized와 ReentrantLock보다 더 빠른 이유는 락의 존재 유무입니다. 혹시 제가 이해한 내용들이 맞을까요?? 현재 81강까지 들었습니다!
anaconda 홈페이지에서 기존 indivisual 설치가 되지 않아 Q&A 에 답변 해주신 miniconda를 설치 하였습니다. 설치후 cmd를 치니 anaconda prompt 가 떳고 여기서 python --version을 확인하니 python만 써지고 버전은 나오지 않네요. 3.14.3 version을 설치 한 상태 입니다 . 혹시 몰라 mkdir 와 jupyer note book 까지 진행 해 봤지만. 더이상 강의를 따라갈수가 없네요 .. 아래는 prompt 화면 입니다 .
[질문 내용] 안녕하세요. 17강에서 와일드카드 공부 중인데, 갑자기 와일드카드 예시에서 기존에 제네릭 예제에서는 사용하지 않던 문법들이 보여서요. 와일드카드를 쓰지 않는 제네릭 메서드인데도 갑자기 메서드 선언 방식이 바뀐 것 같아요. 왜 기존에는 반환값으로 <T> T 를 적었는데 왜 이번 강의에서는 <T> 만 적는 것인지 모르겠어요. 그리고 이전에는 파라미터로 T t 를 넘겼는데, 왜 지금은 Box<T> box 를 통째로 넘기는 것인지도 이해가 안 가요. static <T> void printGenericV1(Box<T> box) { System.out.println("T = " + box.get()); } 이전 제네릭 강의에서 사용한 방식 public <T> T printAndReturn(T t) { System.out.println("animal.className: " + animal.getClass().getName()); System.out.println("t.className: " + t.getClass().getName()); return t; } 감사합니다.
[질문 내용] 여기에 질문 내용을 남겨주세요. { private final Random random = new Random(); private int[] lottoNum; private int count; public int[] generate() { lottoNum = new int[6]; count = 0; while (count < 6) { //1-45 숫자 생성 int num = random.nextInt(45) + 1; //중복 제거 필요 if (isUnique(num, count)) { lottoNum[count] = num; count++; } } return lottoNum; } public boolean isUnique(int num, int count) { if(lottoNum[count]==num){ return false; } else {return true;} } } isUnique 메서드를 이렇게 작성하면 중복제거가 안 되는 이유가 뭘까요
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 접근제어자 - 쇼핑카트 문제에서 장바구니 상품출력 메서드인 displayItems()와 전체 가격 합을 구하는 calculateTotalPrice() 이거로 나누셨는데, 나누는 이유는 유지보수(나중에 소스 수정) 하기에 좋아서 나누셨겠죠? 근데 만약 안나눈다고 가정한다면.. 이런식으로 한 메서드 안에 넣어도 되는 것인지 궁금합니다. 실행 결과는 똑같이 나옵니다. 감사합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 항상 퀼리티 높은 강의를 해주셔서 감사드립니다. 강의를 듣던 중 궁금한 점이 생겨 질문드립니다! 객체를 참조할 때는 .(dot)을 사용한다라고 하셨습니다. 그러면 해당 객체의 참조값을 담은 참조변수는 객체에 접근할 수 있는 참조값을 가지기만 한 것이고 . 을 사용해야 접근 및 멤버들을 사용할 수 있다라고 생각이 드는데 이 생각이 맞는 사고인지 궁금합니다 그림을 그릴때는 객체랑 참조변수랑 참조값으로 연결되어져 있다고 생각했는데 그럼 참조변수는 객체에 접근한 게 아니다라는 의문이 자꾸 들어서 질문 남겨요!
Kotlin 2.3버전에서 달라진 점을 하나 더 말씀드릴려고 합니다. 기존 KClass.createType() 은 제네릭 인자(Arguments)를 명시적으로 전달해야 하는 등 사용이 번거로웠습니다. 구 방식: List::class.createType(arguments = listOf(KTypeProjection.invariant(String::class.createType()))) 신 방식 (권장): typeOf<List<String>>() import kotlin.reflect.KType import kotlin.reflect.typeOf // 1. 단순 타입 val intType: KType = typeOf<Int>() // 2. 제네릭 타입 (중첩 제네릭 가능) val listType: KType = typeOf<List<String>>() val mapType: KType = typeOf<Map<Int, List<String>>>() // 3. 널러블 타입 val nullableType: KType = typeOf<String?>() 혹시나 안되시는 분들은 참고하면 좋을 것 같아요!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 2분33초에 memberB.getAddress()setValue("부산") 부분을 실행할때 setValue()부분에서 오류가 나는데 바로 직전 강의에서 setValue를 삭제하였는데 다시 만든후 실행한건가요? 만들었다면 불변이아닌거아닌가요?
Kotlin에서 Java의 함수형 인터페이스(SAM Interface)를 사용할 때, 이전 버전과 2.0 이후 버전에서 동작이 달라진 부분을 발견해서 공유합니다. @FunctionalInterface public interface StringFilter { boolean filter(String s); } 위와 같은 함수형 인터페이스가 있다고 하면은 Kotlin 1.x (구 컴파일러) 에서는 다음과 같이 SAM 생성자를 명시적으로 사용해야만 했습니다. val filter = StringFilter { s -> s.startsWith("A") } Kotlin 2.0+ (K2 컴파일러) 에서는 아래와 같은 방식이 정상 동작 됩니다. val filter: StringFilter = { s -> s.startsWith("A") } 왜 바뀌었는지 찾아보니 Kotlin 2.0에서 정식 도입된 K2 컴파일러는 프론트엔드를 완전히 새로 작성하면서, 타입 추론(Type Inference)과 호출 해석(Call Resolution) 시스템이 크게 개선되었습니다. K2 컴파일러 마이그레이션 가이드에서는 이를 다음과 같이 설명합니다. "Improved call resolution and type inference." The compiler behaves more consistently and understands your code better. 구체적으로 K2 컴파일러는 기대 타입(Expected Type)이 Java SAM 인터페이스인 모든 위치에서 람다의 암시적 SAM 변환을 지원하도록 확장되었습니다. 이전에는 SAM 변환이 함수 인자 전달 등 제한된 위치에서만 적용됐지만, K2에서는 변수 대입을 포함한 더 넓은 범위에서 일관되게 동작합니다. 실습하다가 너무 잘 되어서 한번 찾아본 결과를 한번 정리해서 드립니다! https://kotlinlang.org/docs/k2-compiler-migration-guide.html https://kotlinlang.org/docs/whatsnew20.html https://kotlinlang.org/docs/fun-interfaces.html https://kotlinlang.org/docs/compatibility-guide-20.html
안녕하세요! 강의 도움이 많이 되고있습니다. [34. 유니티 인앱 결제 SDK 설치] 강의에서 질문있습니다. 저는 자체 서버가 있고 서버에서 Google Cloud Console통해서 영수증 검증 하는 방식으로 구현하려고 하는데요. 강의 중 궁금한부분은 Q. 구글플레이콘솔과, 유니티클라우드에 라이선스키 등록하는 부분은 필수일까요? 1.PackageManager > In App Purchasing 설치는 클라이언트에서 결제를 해야하니 필수 2.ProjectSettings > Service에 UnityProjectID 등록 및 라이선스키 등록은 In App Purchasing 패키지가 동작하는것과는 무관한걸로 조사는 했는데 2번 과정이 어떤 용도인지 확인차 질문드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 메모리 구조, 동작 순서, 코드는 이해가 가는데 막상 문제와 풀이 부분에서 어떻게 해야할지 모르겠어요. 뭔가 이렇게 해야 될 것 같다 까진 생각이 나는데 막상 코드를 치려고 하면 막막해지는 느낌.. 이런 문제는 어떻게 해결 해 나가야 될까요? 경험 부족일까요?
안녕하세요~~ 강의 너무 잘 듣고 있습니다. 강의 듣다가 한가지 의문이 생겨서 질문 남깁니다. GC가 회수한다 라고 말씀을 해주셨는데 여기서 회수는 정확히 어떤 의미일까여? reachable 가능성을 따져서 도달 가능한 인스턴스를 제외한 나머지 공간을 OS에 반납(실제 OS에 반납은 아닐거 같지만 JVM에 반납한다? 라는 의미로 얘기합니다..)한다는 의미일까여 아님 그냥 JVM이 사용가능한 공간으로 만들어 주는것 (free와 같은 개념)으로 만들어 주는걸 의미하는 걸까여? 간략하게 여기서 회수란 메모리 재사용 가능 상태(실제 값이 0으로 초기화 되거나 그런게 아니라 연결을 끊음으로써 언제든 그 공간을 새롭게 할당 가능한 상태)로 돌림으로 이해하면 될까여 아님 실제로 반납을 해주는걸까여....? 진짜 어렵네여 ㅠㅠ 일하면서도 단한번 제대로 잡고간적 없는듯 해서 맨날 헷갈리는 개념입니다 ㅠㅠ