아래 모든 날짜는 시간대 입니다.
   시작 날짜    종료 날짜
수강기간
2020-09-07T00:00:00.0000000Z
2020-12-20T23:59:59.9990000Z
수강신청기간
2020-08-24T00:00:00.0000000Z
2020-09-06T23:59:59.9990000Z

'인간이 생각하는 방식으로 프로그래밍 하자!'라는 야심찬 목표를 가지고 시작한 개체지향 프로그래밍(OOP, Object-Oriented Programming)은 이제 주류 프로그래밍 패러다임이 되었습니다. 허나 기존의 프로그래밍 패러다임(예: 절차적 프로그래밍)에 비해 '인간이 생각하는 방식', 다른 말로 하면 '인간다움'이란 정의는 매우 주관적일 수밖에 없습니다. 각 개인이 속한 환경과 시대에 따라 세상을 보는 눈이 달라지니까요.

이 때문에 특정 OO 언어의 사용법만 익히는 것은 반쪽짜리 OOP 공부입니다. 특정 언어의 사용법은 객관적인 측면일 뿐이니까요. 이 외에 사람의 관점에서 바라본 실세계를 컴퓨터 프로그램의 개체로 모델링할 수 있는 능력(주관적인 측면)을 같이 키워나가야만 제대로 OOP를 배우는 겁니다. 후자는 개체지향 분석 및 설계(OOAD, Object-Oriented Analysis and Design)의 영역으로 본 과목은 OOP와 OOAD(이후 합쳐서 OO라고 표현)를 동시에 가르칩니다.

상술한 주관성 때문에 OO 분야에는 다양한 의견과 주장이 존재해왔습니다. 그리고 어느 시대와 진영의 자료로 공부했느냐에 따라 각 프로그래머가 OO(OOP와 OOAD를 모두 포함)를 이해하는 방식이 많이 다릅니다. 객관성을 추구하는 컴퓨터 과학/공학이라는 학문에 이런 광범위한 주관성은 많은 혼란을 야기합니다. 더 나아가 다른 주장이 나온 이유를 이해하려는 노력 없이 자신이 무비판적으로 수용하며 배운 내용에 기초하여 다른 진영이 무조건 틀렸다고 공격하는 모습들도 OO 분야에서는 종종 발견되는 건설적이지 못한 모습입니다.

이런 문제들을 해결하기 위해 본 과목은 현재 실무에서 다수설로 받아들이는 OO의 정의와 모델링/프로그래밍 기법을 배우는 외에도 이런 다양한 주장들이 나오게 된 배경과 각 주장의 장단점, 그리고 그들 사이에서 어떻게 밸런스를 잡아야 훌륭한 프로그래머가 될 수 있는지에 대한 가이드도 제공합니다.

코스 시작 날짜 : 2020-09-07T00:00:00.0000000Z

1주 차: 2020-09-13T23:59:59.9990000Z 까지

  • Hello World
  • 패키지와 폴더 구조
  • 빌드 및 실행
  • 실행 모델
  • Java 언어의 기본 문법
  • 모듈
  • 실습 1
  • 과제 1  제출 마감: 2020-09-27T22:00:00.0000000Z

2주 차: 2020-09-20T23:59:59.9990000Z 까지

  • 개체지향 프로그래밍(OOP)의 필요성
  • OOP의 주관성 및 토론 시 주의할 점
  • OOP의 4대 특성 소개
  • 클래스와 개체
  • 참조형과 포인터
  • 생성자
  • 실습 2
  • 과제 1  제출 마감: 2020-09-27T22:00:00.0000000Z

3주 차: 2020-09-27T23:59:59.9990000Z 까지

  • 접근 제어자(access modifier)
  • getter/setter 메서드
  • 캡슐화
  • 데이터 추상화
  • 개체 모델링(캡슐화, 데이터 추상화 편)
  • 클래스 다이어그램
  • 유연성과 재사용성
  • 실습 3
  • 과제 1  제출 마감: 2020-09-27T22:00:00.0000000Z

4주 차: 2020-10-04T23:59:59.9990000Z 까지

  • 정적(static) 멤버 변수 및 메서드
  • static에 대한 비판
  • 디자인 패턴 소개
  • 싱글턴
  • 내포(nested) 클래스
  • 실습 4
  • 과제 2  제출 마감: 2020-10-18T22:00:00.0000000Z

5주 차: 2020-10-11T23:59:59.9990000Z 까지

  • 상속
  • 개체의 명시적/암시적 캐스팅
  • RTTI(run time type identification) 기능
  • Object 클래스
  • 실습 5
  • 과제 2  제출 마감: 2020-10-18T22:00:00.0000000Z

6주 차: 2020-10-18T23:59:59.9990000Z 까지

  • 상속이 어려운 이유
  • 상속을 이해하는 두 가지 방법
  • 상속을 이용한 개체 모델링
  • 다중 상속
  • 상속과 추상화 능력
  • 실습 6
  • 과제 2  제출 마감: 2020-10-18T22:00:00.0000000Z

7주 차: 2020-10-25T23:59:59.9990000Z 까지

  • OO에서 재사용성을 중요시하는 이유
  • 상속 vs 컴포지션
  • 상속이 유리한 경우
  • 컴포지션이 유리한 경우
  • 깊은 상속의 문제
  • has-a, is-a 관계
  • 엔티티 컴포넌트 시스템
  • 과제 3  제출 마감: 2020-11-15T22:00:00.0000000Z

8주 차: 2020-11-01T23:59:59.9990000Z 까지

  • 중간고사. 수업 및 과제 없음
  • 과제 3  제출 마감: 2020-11-15T22:00:00.0000000Z

9주 차: 2020-11-08T23:59:59.9990000Z 까지

  • 다형성(polymorphism)
  • 늦은 바인딩, 이른 바인딩
  • final 키워드
  • Object의 다형적 메서드
  • 실습 7
  • 과제 3  제출 마감: 2020-11-15T22:00:00.0000000Z

10주 차: 2020-11-15T23:59:59.9990000Z 까지

  • 추상 메서드, 추상 클래스
  • 인터페이스
  • 인터페이스와 다중 상속
  • Java 어노테이션(annotation)
  • Object의 clone() 메서드
  • 실습 8
  • 과제 3  제출 마감: 2020-11-15T22:00:00.0000000Z

11주 차: 2020-11-22T23:59:59.9990000Z 까지

  • 인터페이스 vs 구현
  • 결합도(coupling)
  • 인터페이스에 대한 오해
  • 시퀀스 다이어그램
  • 디자인 패턴
    • 팩토리 메서드 패턴
    • 빌더 패턴
  • 실습 9
  • 과제 4  제출 마감: 2020-12-06T22:00:00.0000000Z

12주 차: 2020-11-29T23:59:59.9990000Z 까지

  • 디자인 패턴
    • 랩퍼(wrapper), 어댑터 패턴
    • 프록시 패턴
    • 책임 연쇄 패턴
    • 옵저버 패턴
  • 예외(exception)
  • checked 예외와 unchecked 예외
  • 실습 10
  • 과제 4  제출 마감: 2020-12-06T22:00:00.0000000Z

13주 차: 2020-12-06T23:59:59.9990000Z 까지

  • 다양한 오류 상황 대처법
  • 올바른 예외처리 방법
  • SOLID 설계 정신
  • 실습 11
  • 과제 4  제출 마감: 2020-12-06T22:00:00.0000000Z

14주 차: 2020-12-13T23:59:59.9990000Z 까지

  • 소수설에서 태어난 다양한 주장들

15주 차: 2020-12-20T23:59:59.9990000Z 까지

  • 기말고사. 수업 및 과제 없음
제목   공지일   제출 마감일  
실습 1
2020-09-07T00:00:00.0000000Z (1주 차) 2020-09-13T22:00:00.0000000Z
실습 2
2020-09-14T00:00:00.0000000Z (2주 차) 2020-09-20T22:00:00.0000000Z
실습 3
2020-09-21T00:00:00.0000000Z (3주 차) 2020-09-27T22:00:00.0000000Z
실습 4
2020-09-28T00:00:00.0000000Z (4주 차) 2020-10-04T22:00:00.0000000Z
실습 5
2020-10-05T00:00:00.0000000Z (5주 차) 2020-10-11T22:00:00.0000000Z
실습 6
2020-10-12T00:00:00.0000000Z (6주 차) 2020-10-18T22:00:00.0000000Z
실습 7
2020-11-02T00:00:00.0000000Z (9주 차) 2020-11-08T22:00:00.0000000Z
실습 8
2020-11-09T00:00:00.0000000Z (10주 차) 2020-11-15T22:00:00.0000000Z
실습 9
2020-11-16T00:00:00.0000000Z (11주 차) 2020-11-22T22:00:00.0000000Z
실습 10
2020-11-23T00:00:00.0000000Z (12주 차) 2020-11-29T22:00:00.0000000Z
실습 11
2020-11-30T00:00:00.0000000Z (13주 차) 2020-12-06T22:00:00.0000000Z
과제 1
2020-09-07T00:00:00.0000000Z (1주 차) 2020-09-27T22:00:00.0000000Z
과제 2
2020-09-28T00:00:00.0000000Z (4주 차) 2020-10-18T22:00:00.0000000Z
과제 3
2020-10-19T00:00:00.0000000Z (7주 차) 2020-11-15T22:00:00.0000000Z
과제 4
2020-11-16T00:00:00.0000000Z (11주 차) 2020-12-06T22:00:00.0000000Z
2020-09-20T23:59:59.9990000Z 환불 신청 마감
  • 성적표에 기록되지 않음
  • 전액 환불 (처리 수수료 US$ 100 공제)
2020-11-08T23:59:59.9990000Z 수강취소 신청 마감
  • 성적표에 "W"로 표시
(권장 소프트웨어)
  1. 윈도우 운영체제
  2. IntelliJ IDEA 2020.1
  3. Java 11(LTS) Zulu OpenJDK
시험 응시 준비물
  1. 반드시 PC에서(모바일은 응시 불가) 크롬(Chrome) 브라우저를 사용해야 합니다.
  2. 시험을 볼 때 시험 감독 서비스를 사용하며, 서비스를 이용하기 위한 시스템 최소 사양은 다음과 같습니다.
윈도우 리눅스 크롬 운영체제
운영 체제 윈도우 7+ 맥 OSX 10.9+ 우분투 18.04+ 크롬 58+
프로세서 인텔 펜티엄 이상 인텔 인텔 펜티엄 이상 인텔 또는 ARM
사용 가능한 디스크 공간 250 MB 250 MB 250 MB 250 MB
램(메모리) 4 GB1 4 GB1 4 GB1 4 GB1
업로드 속도 0.092 Mbps - 0.244 Mbps
마이크 내장형 또는 독립형
웹캠 VGA 해상도 320x240 이상, 내장형 또는 독립형
1   메모리의 적어도 25%는 다른 응용 프로그램에서 사용되지 않는다고 가정할 때의 최소 용량입니다. 시험 도중에 시스템 크래시가 나는 일이 생기지 않도록 최소 용량의 50%를 확보해 두길 권장합니다.

통과 점수: 85%

  • 실습 1 (1.00 %)

  • 실습 2 (2.40 %)

  • 실습 3 (2.40 %)

  • 실습 4 (2.40 %)

  • 실습 5 (2.40 %)

  • 실습 6 (2.40 %)

  • 실습 7 (2.40 %)

  • 실습 8 (2.40 %)

  • 실습 9 (2.40 %)

  • 실습 10 (2.40 %)

  • 실습 11 (2.40 %)

  • 과제 1 (6.25 %)

  • 과제 2 (6.25 %)

  • 과제 3 (6.25 %)

  • 과제 4 (6.25 %)

  • 중간고사 (25.00%)

  • 기말고사 (25.00%)

   시작 날짜    종료 날짜
수강기간
2021-01-04T00:00:00.0000000Z
2021-04-18T23:59:59.9990000Z
수강신청기간
2020-12-21T00:00:00.0000000Z
2021-01-03T23:59:59.9990000Z

'인간이 생각하는 방식으로 프로그래밍 하자!'라는 야심찬 목표를 가지고 시작한 개체지향 프로그래밍(OOP, Object-Oriented Programming)은 이제 주류 프로그래밍 패러다임이 되었습니다. 허나 기존의 프로그래밍 패러다임(예: 절차적 프로그래밍)에 비해 '인간이 생각하는 방식', 다른 말로 하면 '인간다움'이란 정의는 매우 주관적일 수밖에 없습니다. 각 개인이 속한 환경과 시대에 따라 세상을 보는 눈이 달라지니까요.

이 때문에 특정 OO 언어의 사용법만 익히는 것은 반쪽짜리 OOP 공부입니다. 특정 언어의 사용법은 객관적인 측면일 뿐이니까요. 이 외에 사람의 관점에서 바라본 실세계를 컴퓨터 프로그램의 개체로 모델링할 수 있는 능력(주관적인 측면)을 같이 키워나가야만 제대로 OOP를 배우는 겁니다. 후자는 개체지향 분석 및 설계(OOAD, Object-Oriented Analysis and Design)의 영역으로 본 과목은 OOP와 OOAD(이후 합쳐서 OO라고 표현)를 동시에 가르칩니다.

상술한 주관성 때문에 OO 분야에는 다양한 의견과 주장이 존재해왔습니다. 그리고 어느 시대와 진영의 자료로 공부했느냐에 따라 각 프로그래머가 OO(OOP와 OOAD를 모두 포함)를 이해하는 방식이 많이 다릅니다. 객관성을 추구하는 컴퓨터 과학/공학이라는 학문에 이런 광범위한 주관성은 많은 혼란을 야기합니다. 더 나아가 다른 주장이 나온 이유를 이해하려는 노력 없이 자신이 무비판적으로 수용하며 배운 내용에 기초하여 다른 진영이 무조건 틀렸다고 공격하는 모습들도 OO 분야에서는 종종 발견되는 건설적이지 못한 모습입니다.

이런 문제들을 해결하기 위해 본 과목은 현재 실무에서 다수설로 받아들이는 OO의 정의와 모델링/프로그래밍 기법을 배우는 외에도 이런 다양한 주장들이 나오게 된 배경과 각 주장의 장단점, 그리고 그들 사이에서 어떻게 밸런스를 잡아야 훌륭한 프로그래머가 될 수 있는지에 대한 가이드도 제공합니다.

코스 시작 날짜 : 2021-01-04T00:00:00.0000000Z

1주 차: 2021-01-10T23:59:59.9990000Z 까지

  • Hello World
  • 패키지와 폴더 구조
  • 빌드 및 실행
  • 실행 모델
  • Java 언어의 기본 문법
  • 모듈
  • 실습 1
  • 과제 1  제출 마감: 2021-01-24T22:00:00.0000000Z

2주 차: 2021-01-17T23:59:59.9990000Z 까지

  • 개체지향 프로그래밍(OOP)의 필요성
  • OOP의 주관성 및 토론 시 주의할 점
  • OOP의 4대 특성 소개
  • 클래스와 개체
  • 참조형과 포인터
  • 생성자
  • 실습 2
  • 과제 1  제출 마감: 2021-01-24T22:00:00.0000000Z

3주 차: 2021-01-24T23:59:59.9990000Z 까지

  • 접근 제어자(access modifier)
  • getter/setter 메서드
  • 캡슐화
  • 데이터 추상화
  • 개체 모델링(캡슐화, 데이터 추상화 편)
  • 클래스 다이어그램
  • 유연성과 재사용성
  • 실습 3
  • 과제 1  제출 마감: 2021-01-24T22:00:00.0000000Z

4주 차: 2021-01-31T23:59:59.9990000Z 까지

  • 정적(static) 멤버 변수 및 메서드
  • static에 대한 비판
  • 디자인 패턴 소개
  • 싱글턴
  • 내포(nested) 클래스
  • 실습 4
  • 과제 2  제출 마감: 2021-02-14T22:00:00.0000000Z

5주 차: 2021-02-07T23:59:59.9990000Z 까지

  • 상속
  • 개체의 명시적/암시적 캐스팅
  • RTTI(run time type identification) 기능
  • Object 클래스
  • 실습 5
  • 과제 2  제출 마감: 2021-02-14T22:00:00.0000000Z

6주 차: 2021-02-14T23:59:59.9990000Z 까지

  • 상속이 어려운 이유
  • 상속을 이해하는 두 가지 방법
  • 상속을 이용한 개체 모델링
  • 다중 상속
  • 상속과 추상화 능력
  • 실습 6
  • 과제 2  제출 마감: 2021-02-14T22:00:00.0000000Z

7주 차: 2021-02-21T23:59:59.9990000Z 까지

  • OO에서 재사용성을 중요시하는 이유
  • 상속 vs 컴포지션
  • 상속이 유리한 경우
  • 컴포지션이 유리한 경우
  • 깊은 상속의 문제
  • has-a, is-a 관계
  • 엔티티 컴포넌트 시스템
  • 과제 3  제출 마감: 2021-03-14T22:00:00.0000000Z

8주 차: 2021-02-28T23:59:59.9990000Z 까지

  • 중간고사. 수업 및 과제 없음
  • 과제 3  제출 마감: 2021-03-14T22:00:00.0000000Z

9주 차: 2021-03-07T23:59:59.9990000Z 까지

  • 다형성(polymorphism)
  • 늦은 바인딩, 이른 바인딩
  • final 키워드
  • Object의 다형적 메서드
  • 실습 7
  • 과제 3  제출 마감: 2021-03-14T22:00:00.0000000Z

10주 차: 2021-03-14T23:59:59.9990000Z 까지

  • 추상 메서드, 추상 클래스
  • 인터페이스
  • 인터페이스와 다중 상속
  • Java 어노테이션(annotation)
  • Object의 clone() 메서드
  • 실습 8
  • 과제 3  제출 마감: 2021-03-14T22:00:00.0000000Z

11주 차: 2021-03-21T23:59:59.9990000Z 까지

  • 인터페이스 vs 구현
  • 결합도(coupling)
  • 인터페이스에 대한 오해
  • 시퀀스 다이어그램
  • 디자인 패턴
    • 팩토리 메서드 패턴
    • 빌더 패턴
  • 실습 9
  • 과제 4  제출 마감: 2021-04-04T22:00:00.0000000Z

12주 차: 2021-03-28T23:59:59.9990000Z 까지

  • 디자인 패턴
    • 랩퍼(wrapper), 어댑터 패턴
    • 프록시 패턴
    • 책임 연쇄 패턴
    • 옵저버 패턴
  • 예외(exception)
  • checked 예외와 unchecked 예외
  • 실습 10
  • 과제 4  제출 마감: 2021-04-04T22:00:00.0000000Z

13주 차: 2021-04-04T23:59:59.9990000Z 까지

  • 다양한 오류 상황 대처법
  • 올바른 예외처리 방법
  • SOLID 설계 정신
  • 실습 11
  • 과제 4  제출 마감: 2021-04-04T22:00:00.0000000Z

14주 차: 2021-04-11T23:59:59.9990000Z 까지

  • 소수설에서 태어난 다양한 주장들

15주 차: 2021-04-18T23:59:59.9990000Z 까지

  • 기말고사. 수업 및 과제 없음
제목   공지일   제출 마감일  
실습 1
2021-01-04T00:00:00.0000000Z (1주 차) 2021-01-10T22:00:00.0000000Z
실습 2
2021-01-11T00:00:00.0000000Z (2주 차) 2021-01-17T22:00:00.0000000Z
실습 3
2021-01-18T00:00:00.0000000Z (3주 차) 2021-01-24T22:00:00.0000000Z
실습 4
2021-01-25T00:00:00.0000000Z (4주 차) 2021-01-31T22:00:00.0000000Z
실습 5
2021-02-01T00:00:00.0000000Z (5주 차) 2021-02-07T22:00:00.0000000Z
실습 6
2021-02-08T00:00:00.0000000Z (6주 차) 2021-02-14T22:00:00.0000000Z
실습 7
2021-03-01T00:00:00.0000000Z (9주 차) 2021-03-07T22:00:00.0000000Z
실습 8
2021-03-08T00:00:00.0000000Z (10주 차) 2021-03-14T22:00:00.0000000Z
실습 9
2021-03-15T00:00:00.0000000Z (11주 차) 2021-03-21T22:00:00.0000000Z
실습 10
2021-03-22T00:00:00.0000000Z (12주 차) 2021-03-28T22:00:00.0000000Z
실습 11
2021-03-29T00:00:00.0000000Z (13주 차) 2021-04-04T22:00:00.0000000Z
과제 1
2021-01-04T00:00:00.0000000Z (1주 차) 2021-01-24T22:00:00.0000000Z
과제 2
2021-01-25T00:00:00.0000000Z (4주 차) 2021-02-14T22:00:00.0000000Z
과제 3
2021-02-15T00:00:00.0000000Z (7주 차) 2021-03-14T22:00:00.0000000Z
과제 4
2021-03-15T00:00:00.0000000Z (11주 차) 2021-04-04T22:00:00.0000000Z
2021-01-17T23:59:59.9990000Z 환불 신청 마감
  • 성적표에 기록되지 않음
  • 전액 환불 (처리 수수료 US$ 100 공제)
2021-03-07T23:59:59.9990000Z 수강취소 신청 마감
  • 성적표에 "W"로 표시
(권장 소프트웨어)
  1. 윈도우 운영체제
  2. IntelliJ IDEA 2020.1
  3. Java 11(LTS) Zulu OpenJDK
시험 응시 준비물
  1. 반드시 PC에서(모바일은 응시 불가) 크롬(Chrome) 브라우저를 사용해야 합니다.
  2. 시험을 볼 때 시험 감독 서비스를 사용하며, 서비스를 이용하기 위한 시스템 최소 사양은 다음과 같습니다.
윈도우 리눅스 크롬 운영체제
운영 체제 윈도우 7+ 맥 OSX 10.9+ 우분투 18.04+ 크롬 58+
프로세서 인텔 펜티엄 이상 인텔 인텔 펜티엄 이상 인텔 또는 ARM
사용 가능한 디스크 공간 250 MB 250 MB 250 MB 250 MB
램(메모리) 4 GB1 4 GB1 4 GB1 4 GB1
업로드 속도 0.092 Mbps - 0.244 Mbps
마이크 내장형 또는 독립형
웹캠 VGA 해상도 320x240 이상, 내장형 또는 독립형
1   메모리의 적어도 25%는 다른 응용 프로그램에서 사용되지 않는다고 가정할 때의 최소 용량입니다. 시험 도중에 시스템 크래시가 나는 일이 생기지 않도록 최소 용량의 50%를 확보해 두길 권장합니다.

통과 점수: 85%

  • 실습 1 (1.00 %)

  • 실습 2 (2.40 %)

  • 실습 3 (2.40 %)

  • 실습 4 (2.40 %)

  • 실습 5 (2.40 %)

  • 실습 6 (2.40 %)

  • 실습 7 (2.40 %)

  • 실습 8 (2.40 %)

  • 실습 9 (2.40 %)

  • 실습 10 (2.40 %)

  • 실습 11 (2.40 %)

  • 과제 1 (6.25 %)

  • 과제 2 (6.25 %)

  • 과제 3 (6.25 %)

  • 과제 4 (6.25 %)

  • 중간고사 (25.00%)

  • 기말고사 (25.00%)

   시작 날짜    종료 날짜
수강기간
2021-05-03T00:00:00.0000000Z
2021-08-15T23:59:59.9990000Z
수강신청기간
2021-04-19T00:00:00.0000000Z
2021-05-02T23:59:59.9990000Z

'인간이 생각하는 방식으로 프로그래밍 하자!'라는 야심찬 목표를 가지고 시작한 개체지향 프로그래밍(OOP, Object-Oriented Programming)은 이제 주류 프로그래밍 패러다임이 되었습니다. 허나 기존의 프로그래밍 패러다임(예: 절차적 프로그래밍)에 비해 '인간이 생각하는 방식', 다른 말로 하면 '인간다움'이란 정의는 매우 주관적일 수밖에 없습니다. 각 개인이 속한 환경과 시대에 따라 세상을 보는 눈이 달라지니까요.

이 때문에 특정 OO 언어의 사용법만 익히는 것은 반쪽짜리 OOP 공부입니다. 특정 언어의 사용법은 객관적인 측면일 뿐이니까요. 이 외에 사람의 관점에서 바라본 실세계를 컴퓨터 프로그램의 개체로 모델링할 수 있는 능력(주관적인 측면)을 같이 키워나가야만 제대로 OOP를 배우는 겁니다. 후자는 개체지향 분석 및 설계(OOAD, Object-Oriented Analysis and Design)의 영역으로 본 과목은 OOP와 OOAD(이후 합쳐서 OO라고 표현)를 동시에 가르칩니다.

상술한 주관성 때문에 OO 분야에는 다양한 의견과 주장이 존재해왔습니다. 그리고 어느 시대와 진영의 자료로 공부했느냐에 따라 각 프로그래머가 OO(OOP와 OOAD를 모두 포함)를 이해하는 방식이 많이 다릅니다. 객관성을 추구하는 컴퓨터 과학/공학이라는 학문에 이런 광범위한 주관성은 많은 혼란을 야기합니다. 더 나아가 다른 주장이 나온 이유를 이해하려는 노력 없이 자신이 무비판적으로 수용하며 배운 내용에 기초하여 다른 진영이 무조건 틀렸다고 공격하는 모습들도 OO 분야에서는 종종 발견되는 건설적이지 못한 모습입니다.

이런 문제들을 해결하기 위해 본 과목은 현재 실무에서 다수설로 받아들이는 OO의 정의와 모델링/프로그래밍 기법을 배우는 외에도 이런 다양한 주장들이 나오게 된 배경과 각 주장의 장단점, 그리고 그들 사이에서 어떻게 밸런스를 잡아야 훌륭한 프로그래머가 될 수 있는지에 대한 가이드도 제공합니다.

코스 시작 날짜 : 2021-05-03T00:00:00.0000000Z

1주 차: 2021-05-09T23:59:59.9990000Z 까지

  • Hello World
  • 패키지와 폴더 구조
  • 빌드 및 실행
  • 실행 모델
  • Java 언어의 기본 문법
  • 모듈
  • 실습 1
  • 과제 1  제출 마감: 2021-05-23T22:00:00.0000000Z

2주 차: 2021-05-16T23:59:59.9990000Z 까지

  • 개체지향 프로그래밍(OOP)의 필요성
  • OOP의 주관성 및 토론 시 주의할 점
  • OOP의 4대 특성 소개
  • 클래스와 개체
  • 참조형과 포인터
  • 생성자
  • 실습 2
  • 과제 1  제출 마감: 2021-05-23T22:00:00.0000000Z

3주 차: 2021-05-23T23:59:59.9990000Z 까지

  • 접근 제어자(access modifier)
  • getter/setter 메서드
  • 캡슐화
  • 데이터 추상화
  • 개체 모델링(캡슐화, 데이터 추상화 편)
  • 클래스 다이어그램
  • 유연성과 재사용성
  • 실습 3
  • 과제 1  제출 마감: 2021-05-23T22:00:00.0000000Z

4주 차: 2021-05-30T23:59:59.9990000Z 까지

  • 정적(static) 멤버 변수 및 메서드
  • static에 대한 비판
  • 디자인 패턴 소개
  • 싱글턴
  • 내포(nested) 클래스
  • 실습 4
  • 과제 2  제출 마감: 2021-06-13T22:00:00.0000000Z

5주 차: 2021-06-06T23:59:59.9990000Z 까지

  • 상속
  • 개체의 명시적/암시적 캐스팅
  • RTTI(run time type identification) 기능
  • Object 클래스
  • 실습 5
  • 과제 2  제출 마감: 2021-06-13T22:00:00.0000000Z

6주 차: 2021-06-13T23:59:59.9990000Z 까지

  • 상속이 어려운 이유
  • 상속을 이해하는 두 가지 방법
  • 상속을 이용한 개체 모델링
  • 다중 상속
  • 상속과 추상화 능력
  • 실습 6
  • 과제 2  제출 마감: 2021-06-13T22:00:00.0000000Z

7주 차: 2021-06-20T23:59:59.9990000Z 까지

  • OO에서 재사용성을 중요시하는 이유
  • 상속 vs 컴포지션
  • 상속이 유리한 경우
  • 컴포지션이 유리한 경우
  • 깊은 상속의 문제
  • has-a, is-a 관계
  • 엔티티 컴포넌트 시스템
  • 과제 3  제출 마감: 2021-07-11T22:00:00.0000000Z

8주 차: 2021-06-27T23:59:59.9990000Z 까지

  • 중간고사. 수업 및 과제 없음
  • 과제 3  제출 마감: 2021-07-11T22:00:00.0000000Z

9주 차: 2021-07-04T23:59:59.9990000Z 까지

  • 다형성(polymorphism)
  • 늦은 바인딩, 이른 바인딩
  • final 키워드
  • Object의 다형적 메서드
  • 실습 7
  • 과제 3  제출 마감: 2021-07-11T22:00:00.0000000Z

10주 차: 2021-07-11T23:59:59.9990000Z 까지

  • 추상 메서드, 추상 클래스
  • 인터페이스
  • 인터페이스와 다중 상속
  • Java 어노테이션(annotation)
  • Object의 clone() 메서드
  • 실습 8
  • 과제 3  제출 마감: 2021-07-11T22:00:00.0000000Z

11주 차: 2021-07-18T23:59:59.9990000Z 까지

  • 인터페이스 vs 구현
  • 결합도(coupling)
  • 인터페이스에 대한 오해
  • 시퀀스 다이어그램
  • 디자인 패턴
    • 팩토리 메서드 패턴
    • 빌더 패턴
  • 실습 9
  • 과제 4  제출 마감: 2021-08-01T22:00:00.0000000Z

12주 차: 2021-07-25T23:59:59.9990000Z 까지

  • 디자인 패턴
    • 랩퍼(wrapper), 어댑터 패턴
    • 프록시 패턴
    • 책임 연쇄 패턴
    • 옵저버 패턴
  • 예외(exception)
  • checked 예외와 unchecked 예외
  • 실습 10
  • 과제 4  제출 마감: 2021-08-01T22:00:00.0000000Z

13주 차: 2021-08-01T23:59:59.9990000Z 까지

  • 다양한 오류 상황 대처법
  • 올바른 예외처리 방법
  • SOLID 설계 정신
  • 실습 11
  • 과제 4  제출 마감: 2021-08-01T22:00:00.0000000Z

14주 차: 2021-08-08T23:59:59.9990000Z 까지

  • 소수설에서 태어난 다양한 주장들

15주 차: 2021-08-15T23:59:59.9990000Z 까지

  • 기말고사. 수업 및 과제 없음
제목   공지일   제출 마감일  
실습 1
2021-05-03T00:00:00.0000000Z (1주 차) 2021-05-09T22:00:00.0000000Z
실습 2
2021-05-10T00:00:00.0000000Z (2주 차) 2021-05-16T22:00:00.0000000Z
실습 3
2021-05-17T00:00:00.0000000Z (3주 차) 2021-05-23T22:00:00.0000000Z
실습 4
2021-05-24T00:00:00.0000000Z (4주 차) 2021-05-30T22:00:00.0000000Z
실습 5
2021-05-31T00:00:00.0000000Z (5주 차) 2021-06-06T22:00:00.0000000Z
실습 6
2021-06-07T00:00:00.0000000Z (6주 차) 2021-06-13T22:00:00.0000000Z
실습 7
2021-06-28T00:00:00.0000000Z (9주 차) 2021-07-04T22:00:00.0000000Z
실습 8
2021-07-05T00:00:00.0000000Z (10주 차) 2021-07-11T22:00:00.0000000Z
실습 9
2021-07-12T00:00:00.0000000Z (11주 차) 2021-07-18T22:00:00.0000000Z
실습 10
2021-07-19T00:00:00.0000000Z (12주 차) 2021-07-25T22:00:00.0000000Z
실습 11
2021-07-26T00:00:00.0000000Z (13주 차) 2021-08-01T22:00:00.0000000Z
과제 1
2021-05-03T00:00:00.0000000Z (1주 차) 2021-05-23T22:00:00.0000000Z
과제 2
2021-05-24T00:00:00.0000000Z (4주 차) 2021-06-13T22:00:00.0000000Z
과제 3
2021-06-14T00:00:00.0000000Z (7주 차) 2021-07-11T22:00:00.0000000Z
과제 4
2021-07-12T00:00:00.0000000Z (11주 차) 2021-08-01T22:00:00.0000000Z
2021-05-16T23:59:59.9990000Z 환불 신청 마감
  • 성적표에 기록되지 않음
  • 전액 환불 (처리 수수료 US$ 100 공제)
2021-07-04T23:59:59.9990000Z 수강취소 신청 마감
  • 성적표에 "W"로 표시
(권장 소프트웨어)
  1. 윈도우 운영체제
  2. IntelliJ IDEA 2020.1
  3. Java 11(LTS) Zulu OpenJDK
시험 응시 준비물
  1. 반드시 PC에서(모바일은 응시 불가) 크롬(Chrome) 브라우저를 사용해야 합니다.
  2. 시험을 볼 때 시험 감독 서비스를 사용하며, 서비스를 이용하기 위한 시스템 최소 사양은 다음과 같습니다.
윈도우 리눅스 크롬 운영체제
운영 체제 윈도우 7+ 맥 OSX 10.9+ 우분투 18.04+ 크롬 58+
프로세서 인텔 펜티엄 이상 인텔 인텔 펜티엄 이상 인텔 또는 ARM
사용 가능한 디스크 공간 250 MB 250 MB 250 MB 250 MB
램(메모리) 4 GB1 4 GB1 4 GB1 4 GB1
업로드 속도 0.092 Mbps - 0.244 Mbps
마이크 내장형 또는 독립형
웹캠 VGA 해상도 320x240 이상, 내장형 또는 독립형
1   메모리의 적어도 25%는 다른 응용 프로그램에서 사용되지 않는다고 가정할 때의 최소 용량입니다. 시험 도중에 시스템 크래시가 나는 일이 생기지 않도록 최소 용량의 50%를 확보해 두길 권장합니다.

통과 점수: 85%

  • 실습 1 (1.00 %)

  • 실습 2 (2.40 %)

  • 실습 3 (2.40 %)

  • 실습 4 (2.40 %)

  • 실습 5 (2.40 %)

  • 실습 6 (2.40 %)

  • 실습 7 (2.40 %)

  • 실습 8 (2.40 %)

  • 실습 9 (2.40 %)

  • 실습 10 (2.40 %)

  • 실습 11 (2.40 %)

  • 과제 1 (6.25 %)

  • 과제 2 (6.25 %)

  • 과제 3 (6.25 %)

  • 과제 4 (6.25 %)

  • 중간고사 (25.00%)

  • 기말고사 (25.00%)