강사님 강의 슬라이드를 보면 아래와 같이 31 request 를 예시로 보여주셨는데요, 요청/응답 포맷(규격?) 에 대해 궁금한 부분이 있습니다. 1) 요청 31 01 02 88 79 26 16 ... 31: 루틴서비스 01: 이 부분이 2바이트인데, 0x00 0x01 라고 이해하면 될까요? 02: 이 부분이 routine identifier (3~4bytes) 자리인데요 0x00 00 00 02 라고 이해하면 되나요? 2) 응답 이에 대한 응답은 다음과 같은데요. 71 01 02 88 71: 31+40 (긍정응답) 01: 이 부분이 0x00 0x01 인거죠? 02: 요청과 동일한 크기로. 0x00 00 00 02 라고 이해하면 될까요? 88: 88은 어떤 의미일까요? 미리 감사합니다!
강사님께서 34 서비스에 대한 응답예시로 74 20 0F FF 라고 적어주셨는데요. 74: 34 + 40 (긍정응답) 20: 상위 4bit (Parameter length) 하위 4bit (reserved) 0F FF: 한번에 수신할수 있는 최대 byte 수 여기서 74 다음에 오는 20이 어떤 의미인지 설명을 들어도 잘 이해가 안됩니다. 상위 4비트가 parameter length 이고 0x20 이니까.. parameter length 가 2라는 뜻인데 2가 정확히 무엇을 의미하는 것인지요?
안녕하세요. 영호님 좋은 책 그리고 그에 보충되는 강의를 정말 잘 읽고 있습니다. 책을 읽고 많은 교훈(역할, 책임 협력의 중요성)을 얻고 실무에 반영해보려했던 2년간의 경험이 있었습니다. 역할과 책임에 따른 객체에 따른 클래스 디자인을 설계하고 관계형 데이터베이스와 ORM 기술을 이용해서 설계를 진행할 경우 테이블이 많아지는 경향성이 있다고 느껴왔습니다. DB 모델과 객체 모델은 달라야하는 걸까요? 아니면 같은 형태로 가도록 지향해야할가요? 비즈니스에 맞게 유연하게 진행해야하는 것은 알지만 여기서 "유연하게"가 모델과의 일치를 지향하면서 최적화를 해나가야하는건지 조영호님의 경험과 의견이 궁금합니다. (질문이 제대로 전달되는지 모르겠네요.)
import sys sys.setrecursionlimit(10000) input = sys.stdin.readline N = int(input().rstrip()) graph = [list(map(int, input().rstrip())) for _ in range(N)] dy = [-1, 1, 0, 0] dx = [0, 0, -1, 1] visited = [ [False] * N for _ in range(N) ] distances = [] def dfs(y, x): stack = [(y, x)] distance = 1 while stack: cy, cx = stack.pop() for i in range(4): ny = cy + dy[i] nx = cx + dx[i] if 0 <= ny < N and 0 <= nx < N: if graph[ny][nx] == 1 and not visited[ny][nx]: visited[ny][nx] = True stack.append((ny, nx)) distance += dfs(ny, nx) return distance for i in range(N): for j in range(N): if graph[i][j] == 1 and not visited[i][j]: distances.append(dfs(i, j) - 1) print(len(distances)) for d in sorted(distances): print(d) 이렇게 제가 풀어봤는데요, 예시 입출력은 잘 나오는데 백준에 제출하면 틀렸다고 나오네요. 어느 부분에서 반례가 있는 것일까요?
안녕하세요 😀 , 강의가 너무 재밌어서 2회차 돌고 있는 학습자 인사 드립니다. 🙇 복습하고 있는 중 궁금한 게 있어 글 올리게 되었습니다. 일단, 두 객체가 서로를 참조하는 상황이면 순환참조의 가능성이 있다고 알고 있습니다. Member, Team에서 두 객체가 서로 참조하고 있는 것을 예로써 이 상황을 설명하는 것을 많이 봐 왔습니다. class Team { private long id; private String name; private List<Member> members; } class Member { private long id; private String name; private Team myTeam; } 강좌의 Movie 객체와 Screening 객체도 위 처럼 필드로서 서로 참조하는 것은 아니지만, 아래와 같이 Movie는 Screening을 calculateFee 메소드의 인수로 전달받아 참조하고 있고, Screening은 필드로서 movie를 참조하고 있습니다. public class Movie { private Money fee; private DiscountPolicy discountPolicy; public Movie(Money fee, DiscountPolicy discountPolicy) { this.fee = fee; this.discountPolicy = discountPolicy; } // Movie가 Screening 참조 public Money calculateFee(Screening screening) { return fee.minus(discountPolicy.calculateDiscount(screening)); } public Money getFee() { return fee; } } public class Screening { // Screening이 Movie 참조 private Movie movie; private int sequence; private LocalDateTime whenScreened; public Screening(Movie movie, int sequence, LocalDateTime whenScreened) { this.movie = movie; this.sequence = sequence; this.whenScreened = whenScreened; } public Reservation reserve(Customer customer, int audienceCount) { Money fee = movie.calculateFee(this).times(audienceCount); return new Reservation(customer, this, audienceCount, fee); } public Money getFixedFee() { return movie.getFee(); } public boolean isSequence(int sequence) { return this.sequence == sequence; } public LocalDateTime getStartTime() { return whenScreened; } } 서로 참조하는 것은 당장은 아니더라도 추후에 순환참조를 만들 길을 열어 두게 되어 왠만하면 배제해야 하는 것으로 알고 있습니다. 여기서 질문이 있습니다! 예제에 사용된 Movie와 Screening도 두 객체가 서로를 참조하고 있는 것으로 볼 수 있나요? 만약 그렇다면 이 경우에도 순환참조의 가능성이 있는 것인가요? 감사합니다. 😃
안녕하세요. 차량용 소프트웨어 업데이트 과정이 궁금했었는데, 이렇게 강의를 만들어주셔서 감사합니다. 질문이 몇가지 있는데요. [1] Re-programming 시퀀스가 제조사마다 조금씩 상이할것 같긴 한데요. 하지만, 혹시 "표준"과 같이 문서화 되어 있는 부분이 있나요? DoIP/UDS 시뮬레이터를 만들어보고 싶은데, Re-programming 표준이 있다면, 표준에 근거해서 간단하게 구현해보려고 합니다. [2] 본 강의에서 Re-programming 하는 과정은 차량 정차상태에서 진행되는 소프트웨어 업데이트 과정인 것이죠? 최근에는 주행중에 소프트웨어 업데이트 패키지를 내려받고, 실제 업데이트는 주차할때 진행되는 경우도 있는것 같은데요 그렇다면 주행중 소프트웨어 업데이트 과정에서는 ECU Reset 부분은 동작하지 않을것 같아서 질문드리는것입니다.
안녕하세요, 좋은 강의 감사합니다. 영화 예매 예제를 보면서 궁금한 점이 있어 질문 드립니다. Screening 객체는 DiscountPolicy, DiscountCondition 내부에서도 참조되어 사용되는 것으로 보입니다. 다수의 객체가 Screening 객체를 참조하고 있기에, Screening 객체의 변경 시 변경의 파급 효과(Ripple effect)가 높아지는 상황으로 이해 됩니다. 즉, 결합도가 높은 상태로 보이는데 맞을까요? DiscountPolicy 객체가 비율 할인 정책과, 금액 할인 정책의 책임을 모두 수행할 경우(낮은 응집도)에는. 비록 Screening Movie 객체가 단일 DiscountPolicy 객체에 의존하고 있더라도 파급 효과가 높은 것으로 이해됩니다. 그렇다면 결합도를 정의하는 척도는 의존성의 개수가 아닌 Ripple effect의 가능성이라고 봐도 될까요? (= 결합도가 높으면 파급 효과의 가능성이 높아진다) 감사합니다.
안녕하세요 최근에 Downgrade 방지가 법규인지 적용이 되면서 간혹 신규 ROM을 받아서 필요 차량에 다운로드 시 에러가 발생했습니다. 덕분에 그런 체크도 있다는 걸 알게 되었는데 혹시 해당 부분도 UDS 루틴컨트롤 서비스 중 일부로 하는지 혹시 아시는 부분이 있으면 알려주시면 감사하겠습니다.
궁금한게 있습니다. 생각보다 많은 선배개발자님들은 강의에서 말하는 절차지향프로그래밍을 하고 있습니다. 심지어 우리나라에 네카라쿠배라고 하는 회사에서도 비슷한 장면이 자주 목격되는데요. 그분들이 잘못되었다고 생각하지는 않지만, 어떻게 그렇게 코딩을 하게 된건지 그 뒷배경이 궁금합니다..! 저는 개발한지 이제 7년밖에 되지 않아, 더 과거에 대한 이야기를 알지 못합니다. 조영호님께서는 오랜시간 연구하면서 왜 그렇게 된 것인지 알고 계시지 않을까 싶어 여쭤봐요!
담당자님 안녕하세요! 혹시 수업 노트에서 제공되는 예제 코드로 개선된 코드가 아닌 개선이 필요한 코드를 올려주실 수 있을까요? 강의 7:30 부근에서 "여러분이 직접 결차적인 방식으로 작성된 코드 전체를 도메인의 구조에 맞춰서 변경..." 하면서 수업 노트로 제공된 예제 코드를 개선하는 과제를 암시하고 있습니다. 단, 예제 코드는 이미 개선된 코드를 제공하고 있습니다. 그래서, 의도된 바와는 다르게 개선된 코드를 더 개선하려고 노력하였습니다. 읽어주셔서 감사드립니다!
안녕하세요. 강의 유익하게 잘 듣고 있습니다. 자동차의 여러 가지 세션들을 소개해주셨는데 제가 제대로 이해한 것이 맞는지 궁금해서 글을 올리게 되었습니다. 자동차의 대표적인 진단세션은 Default session, Programmming session, Extended session 이렇게 3가지가 있고, 그중 Extended session은 Default session과 Programming session보다 좀 더 다양한 진단서비스가 가능한 세션이다. ↑ 이렇게 이해했는데 맞나요? 그리고 강의엔 없던 내용이지만 한 가지 더 궁금한 게 있는데, DTC(Diagnostic Trouble Code)를 읽는 진단서비스는 Default session에서도 가능한가요? (DTC가 복잡한 진단서비스인지 간단한 진단서비스인지 잘 모르겠습니다^^;)