상세정보
아이폰, 닷넷, 루비, 플렉스, 파이선 등 최근의 프로그래밍 언어를 배우기 위해 가장 필요한 것은 객체지향 프로그래밍에 대한 개념이라 할 수 있습니다. Java는 객체지향 개념과 함께 C 언어의 포인터 개념에 해당하는 레퍼런스라는 개념도 있습니다. 이러한 객체지향과 포인터에 대한 개념을 제대로 정립하기 위해서 언어를 떠나 왜 이런 개념들이 등장했는지부터 설명합니다. 또한, 안드로이드와 아이폰, 웹에서 공통으로 사용되는 이벤트 처리에 대한 개념을 통해서 새로운 프로그래밍에 적응할 수 있는 내공을 키워 드립니다.
영어 단어를 많이 안다고 해서 영어를 잘하는 것이 아니고 단지 한글을 안다고 해서 멋진 글을 쓸 수 없듯이 프로그래밍 문법을 안다고 해서 제대로 프로그램을 만들 수 있는 것은 아닙니다. 문법과 문법의 사이를 흐르는 멋진 개념들과 미래를 예상하는 프로그래머들의 현명함이 좋은 코드를 만들어 냅니다. 따라서 객체지향적으로 프로그래밍하려면 머릿속의 회로의 순서를 조정해야 합니다. 이 일은 단순하지도 않고, 문법을 배우는 것처럼 명확하지도 않습니다. 저자는 자신이 가진 객체지향에 대한 기준과 개념을 강의실에서 말하듯 풀어내어 독자들이 스스로 객체지향적으로 생각하는 능력을 키우도록 해줍니다.
영어 단어를 많이 안다고 해서 영어를 잘하는 것이 아니고 단지 한글을 안다고 해서 멋진 글을 쓸 수 없듯이 프로그래밍 문법을 안다고 해서 제대로 프로그램을 만들 수 있는 것은 아닙니다. 문법과 문법의 사이를 흐르는 멋진 개념들과 미래를 예상하는 프로그래머들의 현명함이 좋은 코드를 만들어 냅니다. 따라서 객체지향적으로 프로그래밍하려면 머릿속의 회로의 순서를 조정해야 합니다. 이 일은 단순하지도 않고, 문법을 배우는 것처럼 명확하지도 않습니다. 저자는 자신이 가진 객체지향에 대한 기준과 개념을 강의실에서 말하듯 풀어내어 독자들이 스스로 객체지향적으로 생각하는 능력을 키우도록 해줍니다.
Part 1 Java 프로그래밍의 기본
01장 About Java!
__1. Java 언어의 과거와 현재 그리고 미래
__2. Java 언어의 특징
__3. Java 언어를 공부하는 데 필요한 것들
__4. Java 프로그램의 실행 구조를 이해하기
__5. Java 언어의 문법적인 주의사항 및 환경 설정
02장 데이터를 담아두는 상자: 변수(Variables)
__1. 변수란 무엇인가?
__2. 변수는 왜 사용하는가?
__3. Java로 변수를 선언한다는 것
__4. 기본 자료형: byte, short, int, long
__5. 변수를 선언할까 말까?: 변수를 선언하는 판단 기준 가이드
__6. 형 변환(Type Conversion): 데이터를 다른 종류의 상자로
__7. 만들어 봅시다: 화면에서 숫자 입력받기
03장 연산자: 컴퓨터에게 작업을 시키는 기호
__1 산술연산: 더하기, 빼기, 곱하기, 나누기, 나머지
__2 자동증감 연산자: ++, --
__3 동등 비교(Equality) 및 관계(Relational) 연산자
__4 비트 연산자: |, &, ^
__5 논리 연산자: &&, ||
__6 기타 연산자: 삼항 연산자, 할당 연산자
__7 16진수와 8진수
__8 프로그램에서 쓰이는 특수문자
04장 제어문/루프: 상황에 따라 다르게 실행하자
__1 Java에서 제어문이란?
__2 모든 제어문의 기초 if: 만일 ~ 한다면
__3 if ~ else를 간단하게 쓰려는 시도 switch
__4 루프(Loop): 지정된 만큼 실행하라.
__5 do ~ while: 무조건 실행하고 조건을 따지는 방식
__6 주사위 게임 만들기
05장 변수와 제어문을 이용하는 프로그램 만들기
__1. 변수를 언제 써야 하는지 알고 있는가?
__2. 순환문의 활용 용도를 잘 알고 있는가?
06장 데이터를 일렬로 줄 세우는 배열
__1. 배열이란? 이름없는 변수들의 탑
__2. 배열의 문법적인 선언
__3. 배열을 이용하는 프로그램을 만들어봅시다.
__4. 배열에 대한 메모리 공간에 대한 이해
__5. 배열은 비연속적인 정보들을 하나로 모으고 싶을 때 씁니다.
__6. 배열의 남은 내용
Part 2 객체지향 프로그래밍의 등장
07장 객체지향이라는 패러다임
__1. 1에서 100까지의 합을 구하는 프로그램을 만든다면?
__2. 함수의 출현: 로직이나 기능을 하나의 { }으로 묶어서 한 덩어리로 만드는 방식
__3. 메소드: Java에서 어떤 로직이나 기능을 만들어 내는 방법
__4. 메소드의 구성 요소를 정리해봅시다.
__5. 메소드를 이용해 봅시다: 카우프 지수 구하기
__6. 프로그램이 점점 커지면서 발생하는 상황
__7. 다른 메소드의 실행 결과를 항상 참고할 수 있다면?
__8. 데이터와 로직을 결합했더니... 여러 명이 사용하면 문제가 됩니다.
__9. 클래스와 객체의 개념: 데이터와 로직을 하나의 덩어리로 만들고, 각자 데이터를 쓸 수 있게 하자!
__10. 저금통을 클래스로 만들고 객체로 만들기
__11. 객체 자료형: 객체의 리모컨을 담는 변수
__12. 객체와 데이터의 관계
__13. 나만의 클래스, 객체를 만드는 순서
__14. 복불복 기계 만들기
__15. 객체의 데이터란?
__16. 객체: 데이터들의 묶음
__17. 데이터가 주인공인 클래스와 생성자(Constructor)
08장 객체지향 사고방식의 적용
__1. 어째서 나는 클래스를 만들지 못하는가?
__2. 객체와 객체 사이의 의사소통
__3. 인사관리 시스템을 객체지향으로 구성해보기
09장 접근 제한, 패키지(package), static
__1 패키지 폴더 구조
__2 자신만의 패키지를 설계하는 방법
__3 접근 제한이라는 것이 왜 필요한가?
__4 인스턴스 변수와 getter, setter
__5 static이라는 특별한 의미
Part 3 객체지향 프로그래밍의 기법
10장 상속을 통해서 코드를 절약한다.
__1 기본적인 객체지향 프로그래밍 다음에 배워야 하는 내용
__2 상속을 이용하면 빠르게 개발할 수 있을까?
__3 상속을 이용하면 if ~ else를 없앨 수도 있습니다.
__4 추상 클래스(Abstract Class): 객체가 아니라 타입으로만 존재하고 추상 메소드를 가지는 존재
__5 상속 활용 방법: 추상 클래스와 추상 메소드를 어떻게 쓰는가?
__6 상속을 쓸까 말까? 상속을 사용하는 체크포인트
11장 인터페이스 꼭 알아야 하나?
__1. 인터페이스란 무엇인가?
__2. 인터페이스는 실생활에서 많이 사용됩니다.
__3. 문법으로 알아보는 인터페이스
__4. 인터페이스 직접 만들기: '당신이 원하는 기능'을 정의합니다.
__5. 인터페이스는 하나의 클래스에 여러 개를 붙여줄 수 있습니다.
__6. 다형성이라는 것
__7. 인터페이스는 전혀 다른 객체를 하나의 타입으로 인식할 수 있게 합니다.
__8. 인터페이스는 일종의 접근 제한 역할도 할 수 있습니다.
__9. 인터페이스는 다중 상속 문법도 됩니다.
__10. 인터페이스를 이용하는 Advanced 코딩 가이드
__11. 의존성 주입(Dependency Injection)
__12. 인터페이스 vs 추상 클래스
Part 4 컬렉션과 필수 API
12장 편리한 문자열과 API
__1. 고수준 언어와 저수준 언어
__2. 문자열은 API에서 제공하는 클래스입니다.
__3. 문자열의 equals( )와 '=='는 다르다.
__4. 문자열은 변경 불가능한 Immutable 객체
__5. 문자열과 변환
__6. 문자열과 배열
13장 API에서 알아두어야 할 클래스들
__1. StringBuffer, StringBuilder: 문자열은 너무 느립니다.
__2. Date, Calendar, long: 시간을 데이터로 처리하기 위한 장치
__3. java.util.Random: 랜덤한 데이터가 필요합니까?
__4. java.util.Scanner: Scanner의 기능들도 알면 좋겠군요.
__5. 정확한 소수에는 BigDecimal
__6. Wrapper 클래스: 기본 자료형을 객체 자료형으로
__7. 잠시 후에 실행하게 하는 Timer/TimerTask
__8. 데이터를 마음대로 보여주는 Formatter
14장 예외 처리: 프로그램의 보험
__1. 예외(Exception)는 우리가 바라는 상황이 아닙니다.
__2. 예외 상황 때문에 프로그램이 멈추면 안 됩니다.
__3. 가장 흔하게 보는 예외들
__4. Java에서는 예외도 객체로 처리합니다.
__5. try ~ catch: 예외를 직접 처리
__6. Exception은 상속 구조
__7. 끝끝내 실행하는 finally가 있습니다.
__8. throws로 발생한 예외를 던져버린다: 책임지기 싫으면 남에게 책임을 미룹니다.
__9. 예외를 잡느냐, 던지느냐? 그것이 문제입니다.
__10. 사용자 정의 예외(User Defined Exception): 예외를 만들어야 할 때
15장 Java의 Collections (자료구조)
__1. 컬렉션, 자료구조: 데이터가 연결된 구조
__2. 순서대로 마구 중복해서 넣는 List 계열
__3. 도서관의 사물함 같은 Map 계열
__4. 순서 없는 주머니 Set 계열
__5. 트리(Tree): 정리를 잘하는 Tree로 시작하는 클래스
__6. 스택(Stack): 최신 데이터를 가장 빠르게
__7. 어떤 자료구조든 순환해서 볼 수 있는 Iterator/Enumeration
__8. 자료구조의 정렬: Comparable 인터페이스, Comparator 인터페이스
Part 5 입출력 프로그래밍과 네트워킹
16장 java.io 패키지: 데이터 읽고 쓰기
__1. I/O라는게 뭔가요? 데이터의 입출력의 원리
__2. java.io 패키지의 InputStream, OutputStream
__3. InputStream에서 반드시 기억해야 하는 메소드 read( ): 한 바이트의 데이터를 읽는다.
__4. OutputStream: 바이트의 데이터를 기록할 수 있다.
__5. 입출력 프로그래밍에서 사용한 파이프는 반드시 close( )해야만 합니다.
__6. 파일 복사 프로그램의 원리와 실습
__7. 속도가 빠른 파일 복사 프로그램 만들기
__8. InputStream을 FileInputStream 대신에 인터넷에 연결하면?
__9. 문자열 읽고 쓰기
__10. 객체를 읽거나 쓸 수 있는 ObjectInputStream, ObjectOutputStream
__11. InputStream을 Reader로, OutputStream을 Writer로
__12. 마음대로 읽고 쓰는 RandomAccessFile 객체
__13. 파일과 File 객체
__14. 입출력 프로그래밍을 이용한 이미지 파일 생성
__15. 엑셀 파일을 만들고 읽어 보는 Java 프로그래밍
17장 데이터를 주고받는 네트워킹
__1. 네트워크를 통해 메시지를 주고받는다는 건...
__2. Socket 클래스
__3. DataOutputStream
__4. 파일 데이터를 클라이언트에게
18장 Web을 위한 스레드와 네트워킹
__1. ServerSocket과 브라우저
__2. 무조건 동시라는 단어가 나오면 스레드를 생각하면 됩니다.
Part 6 이벤트 처리와 안드로이드 프로그래밍
19장 안드로이드 프로그래밍 준비: 마크업 언어와 이벤트
__1. 화면을 구성하는 프로그래밍의 발전
__2. 프로그래밍 방식 vs. 마크업 방식
__3. 로직의 처리와 이벤트
__4. 이벤트의 메시지 전달 방식에 대한 이해
__5. 아밴트 처리의 전체 구조
__6. Java에서의 Event Handler는 인터페이스를 구현한 객체
20장 안드로이드 실습 환경 갖추기
__1. 안드로이드 실습을 위해서 준비해야 하는 것들
__2. 이클립스에 안드로이드 플러그인 설치하기
__3. 이클립스에서 안드로이드 프로젝트 생성하기
21장 안드로이드 프로그래밍의 필수 지식
__1. 안드로이드의 내부 구조
__2. 안드로이드의 주요 용어
__3. Android App(Application) 구성 분석
__4. 안드로이드의 이벤트 처리 방식
__5. 익명 클래스와 Event Handler
22장 안드로이드 프로그래밍의 디버깅과 Intent
__1. LogCat과 DDMS
__2. 안드로이드의 Intent
__3. Intent를 이용한 Activity 이동하기
__4. Activity 간에 데이터 전달하기
부록 JDK API 문서 활용
01장 About Java!
__1. Java 언어의 과거와 현재 그리고 미래
__2. Java 언어의 특징
__3. Java 언어를 공부하는 데 필요한 것들
__4. Java 프로그램의 실행 구조를 이해하기
__5. Java 언어의 문법적인 주의사항 및 환경 설정
02장 데이터를 담아두는 상자: 변수(Variables)
__1. 변수란 무엇인가?
__2. 변수는 왜 사용하는가?
__3. Java로 변수를 선언한다는 것
__4. 기본 자료형: byte, short, int, long
__5. 변수를 선언할까 말까?: 변수를 선언하는 판단 기준 가이드
__6. 형 변환(Type Conversion): 데이터를 다른 종류의 상자로
__7. 만들어 봅시다: 화면에서 숫자 입력받기
03장 연산자: 컴퓨터에게 작업을 시키는 기호
__1 산술연산: 더하기, 빼기, 곱하기, 나누기, 나머지
__2 자동증감 연산자: ++, --
__3 동등 비교(Equality) 및 관계(Relational) 연산자
__4 비트 연산자: |, &, ^
__5 논리 연산자: &&, ||
__6 기타 연산자: 삼항 연산자, 할당 연산자
__7 16진수와 8진수
__8 프로그램에서 쓰이는 특수문자
04장 제어문/루프: 상황에 따라 다르게 실행하자
__1 Java에서 제어문이란?
__2 모든 제어문의 기초 if: 만일 ~ 한다면
__3 if ~ else를 간단하게 쓰려는 시도 switch
__4 루프(Loop): 지정된 만큼 실행하라.
__5 do ~ while: 무조건 실행하고 조건을 따지는 방식
__6 주사위 게임 만들기
05장 변수와 제어문을 이용하는 프로그램 만들기
__1. 변수를 언제 써야 하는지 알고 있는가?
__2. 순환문의 활용 용도를 잘 알고 있는가?
06장 데이터를 일렬로 줄 세우는 배열
__1. 배열이란? 이름없는 변수들의 탑
__2. 배열의 문법적인 선언
__3. 배열을 이용하는 프로그램을 만들어봅시다.
__4. 배열에 대한 메모리 공간에 대한 이해
__5. 배열은 비연속적인 정보들을 하나로 모으고 싶을 때 씁니다.
__6. 배열의 남은 내용
Part 2 객체지향 프로그래밍의 등장
07장 객체지향이라는 패러다임
__1. 1에서 100까지의 합을 구하는 프로그램을 만든다면?
__2. 함수의 출현: 로직이나 기능을 하나의 { }으로 묶어서 한 덩어리로 만드는 방식
__3. 메소드: Java에서 어떤 로직이나 기능을 만들어 내는 방법
__4. 메소드의 구성 요소를 정리해봅시다.
__5. 메소드를 이용해 봅시다: 카우프 지수 구하기
__6. 프로그램이 점점 커지면서 발생하는 상황
__7. 다른 메소드의 실행 결과를 항상 참고할 수 있다면?
__8. 데이터와 로직을 결합했더니... 여러 명이 사용하면 문제가 됩니다.
__9. 클래스와 객체의 개념: 데이터와 로직을 하나의 덩어리로 만들고, 각자 데이터를 쓸 수 있게 하자!
__10. 저금통을 클래스로 만들고 객체로 만들기
__11. 객체 자료형: 객체의 리모컨을 담는 변수
__12. 객체와 데이터의 관계
__13. 나만의 클래스, 객체를 만드는 순서
__14. 복불복 기계 만들기
__15. 객체의 데이터란?
__16. 객체: 데이터들의 묶음
__17. 데이터가 주인공인 클래스와 생성자(Constructor)
08장 객체지향 사고방식의 적용
__1. 어째서 나는 클래스를 만들지 못하는가?
__2. 객체와 객체 사이의 의사소통
__3. 인사관리 시스템을 객체지향으로 구성해보기
09장 접근 제한, 패키지(package), static
__1 패키지 폴더 구조
__2 자신만의 패키지를 설계하는 방법
__3 접근 제한이라는 것이 왜 필요한가?
__4 인스턴스 변수와 getter, setter
__5 static이라는 특별한 의미
Part 3 객체지향 프로그래밍의 기법
10장 상속을 통해서 코드를 절약한다.
__1 기본적인 객체지향 프로그래밍 다음에 배워야 하는 내용
__2 상속을 이용하면 빠르게 개발할 수 있을까?
__3 상속을 이용하면 if ~ else를 없앨 수도 있습니다.
__4 추상 클래스(Abstract Class): 객체가 아니라 타입으로만 존재하고 추상 메소드를 가지는 존재
__5 상속 활용 방법: 추상 클래스와 추상 메소드를 어떻게 쓰는가?
__6 상속을 쓸까 말까? 상속을 사용하는 체크포인트
11장 인터페이스 꼭 알아야 하나?
__1. 인터페이스란 무엇인가?
__2. 인터페이스는 실생활에서 많이 사용됩니다.
__3. 문법으로 알아보는 인터페이스
__4. 인터페이스 직접 만들기: '당신이 원하는 기능'을 정의합니다.
__5. 인터페이스는 하나의 클래스에 여러 개를 붙여줄 수 있습니다.
__6. 다형성이라는 것
__7. 인터페이스는 전혀 다른 객체를 하나의 타입으로 인식할 수 있게 합니다.
__8. 인터페이스는 일종의 접근 제한 역할도 할 수 있습니다.
__9. 인터페이스는 다중 상속 문법도 됩니다.
__10. 인터페이스를 이용하는 Advanced 코딩 가이드
__11. 의존성 주입(Dependency Injection)
__12. 인터페이스 vs 추상 클래스
Part 4 컬렉션과 필수 API
12장 편리한 문자열과 API
__1. 고수준 언어와 저수준 언어
__2. 문자열은 API에서 제공하는 클래스입니다.
__3. 문자열의 equals( )와 '=='는 다르다.
__4. 문자열은 변경 불가능한 Immutable 객체
__5. 문자열과 변환
__6. 문자열과 배열
13장 API에서 알아두어야 할 클래스들
__1. StringBuffer, StringBuilder: 문자열은 너무 느립니다.
__2. Date, Calendar, long: 시간을 데이터로 처리하기 위한 장치
__3. java.util.Random: 랜덤한 데이터가 필요합니까?
__4. java.util.Scanner: Scanner의 기능들도 알면 좋겠군요.
__5. 정확한 소수에는 BigDecimal
__6. Wrapper 클래스: 기본 자료형을 객체 자료형으로
__7. 잠시 후에 실행하게 하는 Timer/TimerTask
__8. 데이터를 마음대로 보여주는 Formatter
14장 예외 처리: 프로그램의 보험
__1. 예외(Exception)는 우리가 바라는 상황이 아닙니다.
__2. 예외 상황 때문에 프로그램이 멈추면 안 됩니다.
__3. 가장 흔하게 보는 예외들
__4. Java에서는 예외도 객체로 처리합니다.
__5. try ~ catch: 예외를 직접 처리
__6. Exception은 상속 구조
__7. 끝끝내 실행하는 finally가 있습니다.
__8. throws로 발생한 예외를 던져버린다: 책임지기 싫으면 남에게 책임을 미룹니다.
__9. 예외를 잡느냐, 던지느냐? 그것이 문제입니다.
__10. 사용자 정의 예외(User Defined Exception): 예외를 만들어야 할 때
15장 Java의 Collections (자료구조)
__1. 컬렉션, 자료구조: 데이터가 연결된 구조
__2. 순서대로 마구 중복해서 넣는 List 계열
__3. 도서관의 사물함 같은 Map 계열
__4. 순서 없는 주머니 Set 계열
__5. 트리(Tree): 정리를 잘하는 Tree로 시작하는 클래스
__6. 스택(Stack): 최신 데이터를 가장 빠르게
__7. 어떤 자료구조든 순환해서 볼 수 있는 Iterator/Enumeration
__8. 자료구조의 정렬: Comparable 인터페이스, Comparator 인터페이스
Part 5 입출력 프로그래밍과 네트워킹
16장 java.io 패키지: 데이터 읽고 쓰기
__1. I/O라는게 뭔가요? 데이터의 입출력의 원리
__2. java.io 패키지의 InputStream, OutputStream
__3. InputStream에서 반드시 기억해야 하는 메소드 read( ): 한 바이트의 데이터를 읽는다.
__4. OutputStream: 바이트의 데이터를 기록할 수 있다.
__5. 입출력 프로그래밍에서 사용한 파이프는 반드시 close( )해야만 합니다.
__6. 파일 복사 프로그램의 원리와 실습
__7. 속도가 빠른 파일 복사 프로그램 만들기
__8. InputStream을 FileInputStream 대신에 인터넷에 연결하면?
__9. 문자열 읽고 쓰기
__10. 객체를 읽거나 쓸 수 있는 ObjectInputStream, ObjectOutputStream
__11. InputStream을 Reader로, OutputStream을 Writer로
__12. 마음대로 읽고 쓰는 RandomAccessFile 객체
__13. 파일과 File 객체
__14. 입출력 프로그래밍을 이용한 이미지 파일 생성
__15. 엑셀 파일을 만들고 읽어 보는 Java 프로그래밍
17장 데이터를 주고받는 네트워킹
__1. 네트워크를 통해 메시지를 주고받는다는 건...
__2. Socket 클래스
__3. DataOutputStream
__4. 파일 데이터를 클라이언트에게
18장 Web을 위한 스레드와 네트워킹
__1. ServerSocket과 브라우저
__2. 무조건 동시라는 단어가 나오면 스레드를 생각하면 됩니다.
Part 6 이벤트 처리와 안드로이드 프로그래밍
19장 안드로이드 프로그래밍 준비: 마크업 언어와 이벤트
__1. 화면을 구성하는 프로그래밍의 발전
__2. 프로그래밍 방식 vs. 마크업 방식
__3. 로직의 처리와 이벤트
__4. 이벤트의 메시지 전달 방식에 대한 이해
__5. 아밴트 처리의 전체 구조
__6. Java에서의 Event Handler는 인터페이스를 구현한 객체
20장 안드로이드 실습 환경 갖추기
__1. 안드로이드 실습을 위해서 준비해야 하는 것들
__2. 이클립스에 안드로이드 플러그인 설치하기
__3. 이클립스에서 안드로이드 프로젝트 생성하기
21장 안드로이드 프로그래밍의 필수 지식
__1. 안드로이드의 내부 구조
__2. 안드로이드의 주요 용어
__3. Android App(Application) 구성 분석
__4. 안드로이드의 이벤트 처리 방식
__5. 익명 클래스와 Event Handler
22장 안드로이드 프로그래밍의 디버깅과 Intent
__1. LogCat과 DDMS
__2. 안드로이드의 Intent
__3. Intent를 이용한 Activity 이동하기
__4. Activity 간에 데이터 전달하기
부록 JDK API 문서 활용
강요천
1999년부터 Java 관련 개발, 컨설팅, 강의, 유지보수 업무를 수행해왔다. 벤처에서부터 시작하여 프리랜서, 컨설턴트, 대기업에서 솔루션 개발 업무와 R&D, 웹 사이트 설계 및 개발 업무, 시스템 운영 업무, PL/PM을 거쳐 왔다. 프로그래밍 관련 책 모으기를 좋아하고, 전생에 공부를 안 해서 현세에 공부하는 직업인 개발자가 되었다고 믿고 있다. 2008년 이후 현재까지는 주로 Java EE 프레임워크/Java SE 관련 강의를 하고 있다.
주요 경력
BIT 교육센터, 한국 오라클 교육센터, 삼성 SDS 멀티 캠퍼스, 삼성생명, 한국은행, LG전자, 교보생명, 하나은행 등에서 J2EE 관련 프로젝트 수행 및 컨설팅, 강의를 진행해왔다.
1999년부터 Java 관련 개발, 컨설팅, 강의, 유지보수 업무를 수행해왔다. 벤처에서부터 시작하여 프리랜서, 컨설턴트, 대기업에서 솔루션 개발 업무와 R&D, 웹 사이트 설계 및 개발 업무, 시스템 운영 업무, PL/PM을 거쳐 왔다. 프로그래밍 관련 책 모으기를 좋아하고, 전생에 공부를 안 해서 현세에 공부하는 직업인 개발자가 되었다고 믿고 있다. 2008년 이후 현재까지는 주로 Java EE 프레임워크/Java SE 관련 강의를 하고 있다.
주요 경력
BIT 교육센터, 한국 오라클 교육센터, 삼성 SDS 멀티 캠퍼스, 삼성생명, 한국은행, LG전자, 교보생명, 하나은행 등에서 J2EE 관련 프로젝트 수행 및 컨설팅, 강의를 진행해왔다.
아이폰, 닷넷, 루비, 플렉스, 파이선 등 최근의 프로그래밍 언어를 배우기 위해 가장 필요한 것은 객체지향 프로그래밍에 대한 개념이라 할 수 있습니다. Java는 객체지향 개념과 함께 C 언어의 포인터 개념에 해당하는 레퍼런스라는 개념도 있습니다. 이러한 객체지향과 포인터에 대한 개념을 제대로 정립하기 위해서 언어를 떠나 왜 이런 개념들이 등장했는지부터 설명합니다. 또한, 안드로이드와 아이폰, 웹에서 공통으로 사용되는 이벤트 처리에 대한 개념을 통해서 새로운 프로그래밍에 적응할 수 있는 내공을 키워 드립니다.
영어 단어를 많이 안다고 해서 영어를 잘하는 것이 아니고 단지 한글을 안다고 해서 멋진 글을 쓸 수 없듯이 프로그래밍 문법을 안다고 해서 제대로 프로그램을 만들 수 있는 것은 아닙니다. 문법과 문법의 사이를 흐르는 멋진 개념들과 미래를 예상하는 프로그래머들의 현명함이 좋은 코드를 만들어 냅니다. 따라서 객체지향적으로 프로그래밍하려면 머릿속의 회로의 순서를 조정해야 합니다. 이 일은 단순하지도 않고, 문법을 배우는 것처럼 명확하지도 않습니다. 저자는 자신이 가진 객체지향에 대한 기준과 개념을 강의실에서 말하듯 풀어내어 독자들이 스스로 객체지향적으로 생각하는 능력을 키우도록 해줍니다.
영어 단어를 많이 안다고 해서 영어를 잘하는 것이 아니고 단지 한글을 안다고 해서 멋진 글을 쓸 수 없듯이 프로그래밍 문법을 안다고 해서 제대로 프로그램을 만들 수 있는 것은 아닙니다. 문법과 문법의 사이를 흐르는 멋진 개념들과 미래를 예상하는 프로그래머들의 현명함이 좋은 코드를 만들어 냅니다. 따라서 객체지향적으로 프로그래밍하려면 머릿속의 회로의 순서를 조정해야 합니다. 이 일은 단순하지도 않고, 문법을 배우는 것처럼 명확하지도 않습니다. 저자는 자신이 가진 객체지향에 대한 기준과 개념을 강의실에서 말하듯 풀어내어 독자들이 스스로 객체지향적으로 생각하는 능력을 키우도록 해줍니다.