본문 바로가기

Advanced java/T Academy

[1일차] JAVA API 사용 및 JDBC 프로그래밍


이번 방학을 보내던 중, 페이스북에서 t academy 온라인 과정이라는게 있다는걸 들었다. 안드로이드 강좌와 Java 강좌를 몇번 듣다가, 오프라인 강의가 있다는 것을 알게 되었고, 한참 Java를 공부하던 나에게 Java API 사용 및 JDBC 프로그래밍 이라는 강의가 눈에 들어왔다. API, JDBC는 학부 2학년을 마친 나로썬 만져보긴 했지만? 확실히는 모르고, API 분석하는게 좋다고는 하지만? 어떻게 손대야될지 모르는 그런 단계였고, 한창 "아 어떻게 하면 중급 개발자가 될수 있는것인가?" 라는 고민을 할 때 였다. 그래서인지 항상 인터넷 강의도 잘 들어왔고, 꽤 퀄리티가 좋은 강의를 해준다는 소문을 듣고 덜컥 신청하게 되었다. 단순히 신청만 하면 될 줄 알았는데, 중급 강의라서 그런지 시험도 보고, 신청동기와 수강계획을 작성해야 했다. 시험은 그렇게 쉽지만은 않은 약간 헷갈리는게 많은 문제들로 구성되어서 만만하게 봤다간 떨어질 수도 있다. 그러나 응시가 3번까지 가능하다. 시험을 가뿐하게 통과하고 한달을 기다려서 드디어 첫수업을 했고, 매우 만족스러운 강의를 들어서 이 강좌 하시는 강사님을 따라다니면서 계속 수업을 듣고싶은 마음이 드는 강의였다. 오늘부터 배운 내용들을 포스팅 하면서 정리할 계획이다.


1. 처음에는 API라는 이름의 정의와 해석, 그리고 SW들의 공통점을 말하시면서 개발 방법론에 대해 얘기하셨다. 개발방법론들의 등장 배경에는 IT 서비스 환경변화, 사용자의 변화등이 있으며, "객체의 핵심은 유지보수의 효율성"이며, new 보다는 upgrade의 의미가 크다.


2. 객체지향의 특성


추상화

캡슐화

상속

오버로딩

오버라이딩

다형성


여기서, 추상화가 가장 중요하기에 가장 앞에 왔다. 추상화는 업무를 분석 설계해서, 관련 API를 찾는것이다. 즉 요구사항 분석이 가장 중요하다.


3.소프트웨어 개발 방법론

이 강의에서는 API에 초점이 맞춰져 있으므로, 개발방법론에 대한 설명마저도 API를 잘 만드는 기준으로 설명하였다.


1) 구조적 방법론

- 구조적 방법론은 operation 중심으로 프로그래밍 하는 것 이다.(장치 중심 코딩, 기계 중심 코딩)

2) 정보공학(Data 중심) 방법론은 데이터를 중심으로 프로그래밍 하는 것 이다.(금융, 증권, 경영관리 등등)


- 위의 두 방법론을 분석 해 보면, 


1)번 방법론은 "불명확한 요구사항"을 가지는 업무를 할 때에 이 방법론으로 시작하게 된다. 데이터가 명확하지 않은 업무 상황에서, 어떤 데이터가 오더라도 유연하게 작동하는 프로그래밍을 해야 하며 어려운 방법론이지만 이론적으로 실무에서는 이런 상황에 더욱 많이 마주하게 된다. 


2)번 방법론은 "명확한 요구사항"을 가지는 업무를 할 때에 이 방법론으로 시작하게 된다. 증권 금융 전자쪽 과 같은 데이터가 명확한 업무 상황에서 프로그래밍을 하게 될때는 그 데이터에 맞는 작동을 하게 프로그래밍 하면 되므로 위의 방법론 보다는 쉬운 방법론에 속한다. 우리가 일반적으로 학교에서 처음 배우는 프로그래밍수업의 대부분은 이 방법론에 의해 수업을 진행한다.


사실 위의 두 방법론은 따로따로가 아니라 하나에서 다른 하나로 방법론을 바꾸며 프로그래밍이 진행된다.어떤 객체를 구현한다고 했을 때, 데이터가주어진 상황이라면 데이터를 먼저 정의 해 두고(2번 방법) 그에 맞는 동작들을 구현하며(1번방법), 데이터가 주어지지 않고 먼저 어떤 작동을 해야하는지 요구사항을 분석하여 그에 맞는 메소드들을 먼저 정의하고(2번방법), 그 다음 그에 필요한 데이터들을 정의해 나가며(1번방법) 프로그래밍을 한다. 우리는 1번에서 2번으로 갈껀지(데이터가 모호한 상황인지) 2번에서 1번으로 갈껀지(데이터가 명확한 상황인지) 기준을 확실히 정한 후 요구사항을 분석하고 프로그래밍에 들어가야 한다.


예시를 들어보자, 우리는 세가지 요구사항을 받았다


학생은 로그인을 할 수 있다.

학생은 학번 이름 성적 조회를 할 수 있다.

학생은 비밀번호를 변경 할 수 있다.


2번방법부터 시작한다면, 데이터로 학번 이름 성적을 조회하고 그다음 1번방법처럼 로그인이라던지 비밀번호 변경이라던지를 구현 할 것이다.


1번방법부터 구현한다면, 로그인과 비밀번호 변경을 먼저 구현하면서 여러 테스트를 해보고 데이터를 정의 할 것이다.


3) 객체지향 방법론은 위에서 말했듯, 1번이 먼저인지 2번이 먼저인지 판단해 가면서 개발하는 방식이 된다.


4) CBD 방법론은 요구사항 전체를 기준으로 여러 단위로 쪼개서 개발하는 방법론이다. 기간에 구애받지 않고, 큰 프로젝트에서 사용된다.


5) 애자일 - test 중심으로 요구사항을 구체화 하면서 개발하는 방식이다. 기간이 짧고, 소통이 중요하다.


6) UI/UX - 사용자의 요구사항을 UI 중심으로 풀어낸다. 사용자와의 요구사항 정리 기간이 길다면 약간의 코딩을 하기도 하고, 짧다면 간단히 페이퍼상으로 소통하며 기획한다.


4. 객체의 특징


객체를 설계할 때는 최소한 뭘 하겠다는 목적이 명확해야 한다.


요구사항 --> 특성(데이터), 동작(operation) --> class


위에서 예를 든 예시로 객체를 설계 해 보자.


학생은 로그인을 할 수 있다.

학생은 학번 이름 성적 조회를 할 수 있다.

학생은 비밀번호를 변경 할 수 있다.


1) 요구사항 분석 -> 주어, 동사, 명사로 나누며, 주어 동사가 중요하다.


2) 주어 : 학생

   동사 : 로그인하다 비밀번호수정하다 학생정보를확인하다

   명사 : 학번 이름 성적 비밀번호 아이디


3) 우리는 어떤거부터 해야할까?

- 우리는 명확한것 -> 데이터중심의 클래스 

- 현업에서는 불명확한것 -> 인터페이스

- operator중심이라면,1) 메서드 정의 2) 멤버변수정의 3) 생성자정의

- data 중심이라면 1) 멤버변수정의 2) 메서드정의 3) 생성자정의


예시로 Student 객체를 설명과 함께 만들어 보았다.


5. 상속
우리는 상속을 어려워하고 실제 현업에서도 상속관계로 어떤 구조가 나오기란 쉽지 않은 일이다. 하지만 일단 상속구조를 설계하는 법을 파헤쳐보려 한다.

1) 요구사항에 맞춰 공통멤버를 가지는 클래스라도 일단 따로따로 작성한다
2) 기존 클래스들에서 공통 멤버를 추출한다.
3) 공통클래스를 기존 클래스가 상속한다.

즉 1차로 기초클래스를 작성한 후에 다 비교한다. 그리고 나서 공통 데이터 공통 Interface 들을 추출한다.
2차로 bottom up 방식으로 상위클래스를 설정하고 상속관계로 만들어 준다.

예시로 이런 요구사항이 주어졌다고 가정하고 객체를 만들어 보자.

학생은 학번 이름 print를 가진다.
선생님은 교번 이름 print를 가진다.

먼저 두 객체를 보면 이름과 print 메소드를 공통으로 가진다. 그렇다면 이 공통된 부분은 Human으로 빼고, 각자는 이 Human객체를 상속받게 하면 상속 구조 된다.

Human class



Student class



항상 객체지향 설계를 할 때에는, 먼저 요구사항을 분석하고, 대락적인 데이터와 메소드을 추려 낸 후에, 구조를 파악하고, 코딩에 들어가게 된다. 요구사항을 분석 할 때에는 구현을 염두하지 말고 구현해야 하며, 구현 해가면서 여러가지를 도 염두하면서 해야한다(getter setter, equals, 생성자 오버로딩 오버라이딩 ). 으 어렵다.