3주차 주간보고서 (구버전)
3주차 종합 보고서 - 객체지향 프로그래밍과 설계
Section titled “3주차 종합 보고서 - 객체지향 프로그래밍과 설계”- 기간: 3주차 (월요일 ~ 금요일)
- 주제: 객체지향 프로그래밍(OOP) 패러다임 전환
- 참가자: 12명 (2주차 수료자 전원)
- 목표: 절차적 프로그래밍에서 객체지향 프로그래밍으로의 사고 전환
일일 진도 요약
Section titled “일일 진도 요약”월요일 - 클래스와 객체의 세계
Section titled “월요일 - 클래스와 객체의 세계”- 클래스 개념 도입 (“붕어빵 틀과 붕어빵”)
- Todo를 객체로 모델링
- 속성과 메서드 이해
- 성과: Todo 클래스 설계 및 구현
화요일 - 캡슐화와 정보 은닉
Section titled “화요일 - 캡슐화와 정보 은닉”- private, public 접근 제어자
- getter/setter 메서드
- 데이터 보호의 중요성
- 성과: 안전한 Todo 클래스 완성
수요일 - 컬렉션과 제네릭
Section titled “수요일 - 컬렉션과 제네릭”- ArrayList
활용 - 타입 안정성 이해
- 컬렉션 API 활용
- 성과: 타입 세이프한 Todo 관리
목요일 - 인터페이스와 다형성
Section titled “목요일 - 인터페이스와 다형성”- 인터페이스 설계
- 다형성의 이해와 활용
- 확장 가능한 구조 설계
- 성과: 유연한 아키텍처 구현
금요일 - 종합 리팩토링
Section titled “금요일 - 종합 리팩토링”- 전체 코드 객체지향적 재설계
- 디자인 패턴 맛보기
- 클린 코드 원칙 적용
- 성과: 프로페셔널한 코드 구조 완성
패러다임 전환의 여정
Section titled “패러다임 전환의 여정”Before (절차적 사고)
Section titled “Before (절차적 사고)”// 2주차 스타일
ArrayList<String> todos = new ArrayList<>();
ArrayList<Boolean> completed = new ArrayList<>();
ArrayList<String> dates = new ArrayList<>();
todos.add("숙제하기");
completed.add(false);
dates.add("2024-01-15");
After (객체지향적 사고)
Section titled “After (객체지향적 사고)”// 3주차 스타일
public class Todo {
private String title;
private boolean completed;
private LocalDate dueDate;
public Todo(String title, LocalDate dueDate) {
this.title = title;
this.completed = false;
this.dueDate = dueDate;
}
public void complete() {
this.completed = true;
}
}
List<Todo> todos = new ArrayList<>();
todos.add(new Todo("숙제하기", LocalDate.of(2024, 1, 15)));
주요 학습 성과
Section titled “주요 학습 성과”개념적 이해
Section titled “개념적 이해”- 추상화: 현실의 개념을 코드로 표현
- 캡슐화: 데이터와 기능의 묶음
- 상속: 코드 재사용과 확장성
- 다형성: 유연한 코드 설계
실무적 스킬
Section titled “실무적 스킬”- 클래스 설계: 책임과 역할 분리
- 패키지 구조: 체계적인 코드 구성
- 예외 처리: 객체지향적 에러 핸들링
- 테스트 주도: 객체 단위 테스트
학생들의 “아하!” 모먼트
Section titled “학생들의 “아하!” 모먼트””클래스가 뭔지 알겠어요!”
Section titled “”클래스가 뭔지 알겠어요!””월요일 오후 3시경
- 한 학생이 갑자기 손을 들고 외침
- “아! 클래스는 설계도고, 객체는 실제 물건이구나!”
- 전체 학생들에게 전파되는 깨달음
”왜 private을 쓰는지 알겠어요!”
Section titled “”왜 private을 쓰는지 알겠어요!””화요일 실습 중
- public 변수 직접 수정으로 인한 버그 경험
- private + getter/setter의 필요성 체감
- “보호해야 안전하구나!"
"인터페이스가 이런 거였구나!”
Section titled “"인터페이스가 이런 거였구나!””목요일 설계 시간
- 여러 종류의 Todo 구현 필요성 인식
- 인터페이스를 통한 규약 정의
- “레고 블록처럼 끼워 맞출 수 있네요!”
프로젝트 진화 과정
Section titled “프로젝트 진화 과정”1단계: 단순 클래스
Section titled “1단계: 단순 클래스”public class Todo {
String title; // public 필드
boolean done;
}
2단계: 캡슐화 적용
Section titled “2단계: 캡슐화 적용”public class Todo {
private String title;
private boolean completed;
// getter/setter 추가
}
3단계: 기능 추가
Section titled “3단계: 기능 추가”public class Todo {
// 필드들...
public void complete() {
this.completed = true;
this.completedAt = LocalDateTime.now();
}
public boolean isOverdue() {
return !completed &&
dueDate != null &&
dueDate.isBefore(LocalDate.now());
}
}
4단계: 인터페이스 도입
Section titled “4단계: 인터페이스 도입”public interface ITodo {
void complete();
boolean isCompleted();
String getTitle();
}
public class SimpleTodo implements ITodo { }
public class RecurringTodo implements ITodo { }
주목할 만한 학생 작품
Section titled “주목할 만한 학생 작품”🏆 “Smart Todo System”
Section titled “🏆 “Smart Todo System””- 제작자: 최학생
- 특징:
- Command 패턴 적용
- Undo/Redo 기능
- 메멘토 패턴으로 상태 저장
- 평가: “3주차에 이런 수준이라니!”
🎨 “Todo with Style”
Section titled “🎨 “Todo with Style””- 제작자: 정학생
- 특징:
- Decorator 패턴으로 동적 스타일링
- 플러그인 아키텍처
- 확장 가능한 구조
- 평가: “창의성과 기술력의 조화”
어려움과 극복
Section titled “어려움과 극복”개념적 장벽
Section titled “개념적 장벽”-
“왜 복잡하게 만들어요?”
- 초기 저항감 존재
- 대규모 프로젝트 예시로 설득
- 직접 경험을 통한 이해
-
“this가 뭔가요?”
- self 참조 개념의 혼란
- 시각적 설명과 디버깅으로 해결
- 실습을 통한 체득
-
“인터페이스는 왜 필요해요?”
- 추상적 개념의 어려움
- 실제 시나리오 제시
- “전원 플러그” 비유로 이해
극복 스토리
Section titled “극복 스토리”“처음엔 왜 이렇게 복잡하게 하나 싶었는데, 기능을 추가할 때 정말 편하더라고요. 이제 이전 방식으로는 못 돌아갈 것 같아요.” - 학생 C
출석률: 100% (60/60)
OOP 개념 이해도: 85%
리팩토링 완성률: 92% (11/12)
코드 품질 향상: 평균 3.2배
클래스 설계 능력: 초급 → 중급
코드 품질 변화
Section titled “코드 품질 변화”복잡도 감소
Section titled “복잡도 감소”- 메서드당 평균 라인: 45줄 → 12줄
- 순환 복잡도: 15 → 4
- 중복 코드: 35% → 5%
- 클래스 수: 1개 → 평균 8개
- 패키지 구조: 없음 → 3-tier
- 인터페이스 활용: 0개 → 평균 3개
교육적 통찰
Section titled “교육적 통찰”-
구체적인 비유 사용
- 붕어빵, 자동차, 레고 등
- 일상 생활과 연결
- 추상적 개념의 구체화
-
단계적 전환
- 급진적 변화 지양
- 점진적 개선 유도
- 각 단계별 성취감 제공
-
실패를 통한 학습
- 일부러 문제 상황 연출
- 해결 과정에서 깨달음
- “왜 필요한가” 체감
놀라운 발견
Section titled “놀라운 발견”- 학생들이 스스로 디자인 패턴 발견
- 코드 리뷰 문화 자발적 형성
- 리팩토링의 즐거움 발견
4주차 전망
Section titled “4주차 전망”학생들의 준비도
Section titled “학생들의 준비도”- OOP 기본 개념 숙지 완료
- 설계에 대한 관심 증가
- 더 큰 도전에 대한 열망
계획된 심화 학습
Section titled “계획된 심화 학습”- 레이어드 아키텍처
- 의존성 주입
- 테스트 주도 개발
- 실무 수준의 프로젝트 구조
3주차는 진정한 의미의 “개발자 탄생”을 목격한 주간이었다. 단순히 코드를 작성하는 것을 넘어, 설계하고 구조화하는 능력을 갖추기 시작했다.
가장 인상적인 변화는 학생들의 사고방식이다. “어떻게 구현할까?”에서 “어떻게 설계할까?”로 질문이 진화했다. 코드를 보는 눈이 달라졌고, 문제를 해결하는 접근법이 체계적으로 변했다.
특히 주목할 점은 학생들이 객체지향의 장점을 직접 체험하면서 얻은 확신이다. 강제가 아닌 자발적 선택으로 OOP를 받아들였고, 이는 향후 학습에 든든한 기반이 될 것이다.
3주차의 가장 큰 성과: “이제 저희가 짠 코드를 1년 후에 봐도 이해할 수 있을 것 같아요!”라는 한 학생의 말이 모든 것을 대변한다.
강사 소감: “붕어빵 틀 비유를 100번은 사용한 것 같지만, 그만큼 효과적이었습니다. 학생들이 추상적 개념을 구체적으로 이해하는 순간의 표정은 언제나 감동적입니다. 이제 4주차에서는 이들이 진짜 현업 수준의 코드를 작성하는 모습을 기대합니다.”
작성일: 3주차 금요일 작성자: 교육 담당 강사 다음 주: 아키텍처와 설계 패턴의 세계로!