Java/MIT

    Reading 9: Mutability & Immutability

    Mutability & Immutability Objectives mutability 와 mutable 인 object 이해하기 aliasing 를 식별하고 mutability 의 위험을 이해한다. immutability를 사용하여 정확성과 명확성 및 변경 가능성을 향상한다. Mutability snapshot diagrams 에 대해 이야기 했을 때 한번 생성하면 항상 같은 값을 같는 immutable 객체가 있었다. 그 외에는 오브젝트의 값을 변경 할 수 있는 메서드가 있는 mutable 객체이다. String 는 immutable type → 항상 같은 값을 가진다. StringBuilder 은 mutable type → 문자열의 일부를 삭제하거나 삽입 대체 할 수 있다. String는 불변이므로 ..

    Reading 8: Avoiding Debugging

    Avoiding Debugging 목표: 디버깅을 완전히 방지하거나 디버깅을 해야 할 때 쉽게 사용할 수 있는 방법을 배운다. First Defense: Make Bugs Impossible 버그를 위한 최고의 방어는 설계상 버그를 불가능하게 만드는 것 우리는 첫번째 단원에서 static checking 에 대해서 이야기 한 적있다. static checking 는 컴파일 타임에 버그를 잡아서 많은 버그를 제거해준다. dynamic checking 를 이야기 한 적있다. 예를 들어 자바는 배열 오버플로우를 동적으로 잡아내서 이를 불가능하게 만든다. 만약 array 또는List 의 경계 이상에 인덱스로 접근하려고 할 때 자바는 자동으로 오류를 읽으킨다.(C, C++ 같이 오래된 언어는 오류 접근을 허용하기..

    Reading 7: Designing Specifications

    Designing Specifications 목표 결정된 스펙을 이해하고, 비결정성을 식별 및 평가할 수 있는 능력을 갖는 것 선언적 스펙과 운영 스펙을 이해하고 선언적 스펙을 작성할 수 있다. preconditions, postconditions 그리고 spec의 강도를 이해하고 스펙의 강도를 비교할 수 있다. 적절한 강도의 일관성 있고 유용한 스펙을 작성할 수 있다. Introduction 유사한 행동을 하는 다양한 스펙을 보고 둘 사이에 장단점을 파악한다. 스펙 비교를 위한 3가지 관점 얼마나 결정적인가? : 스펙은 주어진 입력에 대해서 단일 가능 출력만을 정리하는가? 아니면 구현자가 나올 수 있는 결과값 집합 중 선택할 수 있는 것을 허용하는가? 얼마나 선언적인가? : 스펙은 단지 출력값이 무엇인..

    Recursion - MIT 6.005

    Recursion - MIT 6.005

    Recursion 목표 재귀 문제를 recursive step과 base case로 분리할 수 있다. recursion에서 help메서드를 사용하는 시기와 방법을 알 수 있다. recursion과 iteration의 장점과 단점을 이해 할 수 있다. Recursion 우리는 이미 spec이 있는 경우 메소드를 구현하는 방법에 대해서 알아 볼 것이다. → recursion은 모든 문제에 유용한 것은 아니지만 소프트웨어 개발을 하는데에 있어서 많은 사람들이 고민을 한다. Recursion function은 base case와 recursive step로 구분된다. base case : 함수 호출에 대한 입력이 주어지면 바로 결과를 계산한다. recursive step : 동일한 함수에 대한 하나 이상의 re..

    Reading 6: Specifications - MIT 6.005

    Specifications Objectives(목표) 메소드 스펙에 preconditions 와 postconditions 를 이해하고 정확한 specifications를 작성 할 수 있다. specification에 대한 테스트를 작성할 수 있다. 자바에서 확인되지 않은 예외와 확인된 예외의 차이점을 알 수 있다. 특별한 결과에 대한 예외를 사용하는 법에 대한 이해를 할 수 있다. Introduction Specifications는 팀워크의 핵심이다: Specification없이 메소드를 구현하는 것에 대한 책임을 지는 것은 불가능하다. specification은 계약서 역할을 한다 : implementer은 계약서를 충족 할 의무가 있으며 client는 계약서에 의존 하여 메소드를 사용 할 수 있다...

    Reading 5: Version Control - MIT 6.005

    Reading 5: Version Control - MIT 6.005

    Introduction 소프트웨어 엔지니어링 세계에서는 Version control system은 필수적이다. 크든 작든 없으면 불편하고 짜증 날 것이다. 우리는 이미 버전관리를 해봤음 Drop box 실행 취소/ 다시 실행 버전 번호가 있는 파일 복사본 보관 Inventin version control 엘리스라는 사람이 있다고 가정 할 때 예시등을 설명해줌 프로그래머가 혼자 작업하는 시나리오를 고려하면 version control 에서 지원해야할 것들이 있음 과거 버전으로 되돌아가기 다른 버전과의 다른 점 비교 다른 위치로 버전을 푸시 해당 위치에서 기록을 가져오기 동일한 이전 버전에서 파생된 버전 합치기 Version control terminology(버전 관리 용어) Repository : 프로젝..

    Reading 4: Code Review - MIT 6.005

    Code Review Code Review → 코드 리뷰는 코드 개발자가 아닌 다른 사람들이 코드를 신중하고 체계적으로 연구하는 것이다. 코드 리뷰의 두가지 목적 Improving the code(코드 개선): 버그 찾기, 나타날 수 있는 버그 예상, 코드 명확성 확인, 프로젝트의 스타일 표준과 맞는지 확인 Improving the programmer.(프로그래머 개선): 코드 리뷰는 프로그래머가 새로운 언어의 기능, 프로젝트 설계, 프로젝트 코딩 표준, 그리고 새로운 기술등에 대해 서로 배우고 가르치는 중요한 방법이다. 오픈 소스 프로젝트에서는 코드 검토라는 맥락에서 많은 대화가 이루어진다. ****코드 리뷰는 업계에서도 널리 시행된다. Ex) 구글 같은 곳에서는 다른 개발자가 코드 검토를 승인할 때까..

    Reading 3: Testing - MIT 6.005

    Reading 3: Testing - MIT 6.005

    Testing 목표 → Testing 과목에서 알아야할 것 Testing의 중요성의 이해 - 테스트 우선 프로그래밍의 과정을 알아야함 input, output 공간을 분리하고 좋은 테스트 케이스를 선택하여 메서드를 위한test suite를 설계하는 것 code coverage를 측정하여 test suite 판단 블랙 박스 테스트와 화이트박스를 사용해야할 때, 단위 테스트 통합 테스트 그리고 회귀 테스트에 대하여 이해하는 것 Validation → 테스트는 validation(검증) 이라고 하는 일반적인 프로세스의 예시이다. validation의 목적으로는 프로그램에서 보이지 않는 문제와 프로그램의 정확성에 대한 신뢰성을 높히는 것이다. Formal reasoning(형식적 추론) → 프로그램에서는 ver..