2010. 7. 6. 17:53

자바(Java)의 객체지향(OOP) 프로그래밍 기초개념

자바에서 객체를 `클래스(class)`라고 하고, 클래스 명을 부여한 후 그 특성과 기능을 정의하여 소프트웨어적인 객체를 만든다. 여기서 클래스의 특성은 `변수`가 되고, 기능은 `메소드()`가 된다.

class '클래스명' {   //파일을 저장할 때에는 꼭 클래스명을 파일명으로 해야한다. 멋진 생각이다.
    //변수 선언
    String civilNumber ;  //주민등록번호를 입력받는 변수.
    //메소드 선언
    check() {
        //주민등록번호를 입력받아서 생일을 저장하고, 남녀를 구분하는 기능.
    }    
}
바로 위의 코드가 자바에서 말하는 하나의 `객체`가 된다. 메소드는 다른 언어에서 말하는 `함수`이다. 이렇게 한 번 잘 만들어진 객체는 향후 언제 어느때라도 그대로 쓸 수가 있어서 각각의 객체들을 잘 만들어 놓고 이들을 조합하기만 하면 훌륭한 자바 프로그램이 된다. 마치 레고블록을 쌓는 것 같은 개념이다. 프로그램 설계측면에서 보더라도 훌륭한 개념의 언어임에 분명하다.

한 번 만들어진 객체라도 나중에 수정을 할 일이 있을 것인데 그때는 그 객체에만 수정을 가하면 되기 때문에 전체 프로그램에서 다른 부분은 손을 댈 필요가 없다. 아주 당연한 것처럼 생각되지만, 자바 이전의 절차지향이라는 개념의 언어들에서는 이 간단한 개념이 적용되지 않았다. 그래서, 비슷한 프로그램을 만들때조차 이전에 만들어진 작업물을 활용하지 못해 포기하고 새로 작성하는 낭비가 있었다.

자, 그럼 이제 자바에서 객체를 만들었으면 그걸 어떻게 쓸까? 위에서 정의한 객체(클래스)를 선언하면 되는데 그 문법절차는 다음과 같다. 위의 클래스명을 CheckNumber라고 가정하자. 그러면,

CheckNumber cn = new CheckNumber() ;

라고 해주어야 한다. 'cn'은 사용자가 임의로 지정해 주는 이름이다. 이렇게 해준 후에 이 객체의 변수나 메소드를 사용하게 되는데,

cn.civilNumber = 임의의 값 ;
cn.check() ;

이런 식으로 쓰면 된다. 간단하게나마 이것을 객체지향 방식이라고 한다.

자바에서 가장 기억해야 할 것은 바로 `자바는 전부 객체`라는 겁니다. 물론 문법도 있고 크게 볼 때 프로그래밍의 흐름이라는 것도 있습니다. 하지만 모든 것을 객체로 처리하는 특성상 C나 여타 다른 절차지향 컴파일러와는 프로그램 작성 방식이 다릅니다.

이점이 초보 프로그래머는 물론 이전에 C나 다른 절차지향 컴파일러를 공부하신 분들이 가장 개념 잡기 어려운 점일 수도 있습니다. 그나마 C언어를 공부하신 분들은 입출력, 구조체 부분을 제외한 나머지 문법부분이 같기 때문에 좀 수월할 수도 있고, 특히 C++까지 공부하신 분들은 보다 더 쉽게 자바의 객체지향을 이해할 수 있겠습니다.

객체지향이 무엇인지만 이해할 수 있으면 자바를 알고 있다고 해도 되므로 여기에 자바에서 객체지향이라는 개념으로 프로그래밍하는 방법을 소개하죠. 아주 간단한 프로그램인데, 핵심은 바로 객체를 이용한 코딩이라는 겁니다. 이미 자바를 알고 계신 분들이라면 정말 아무것도 아니지만 그 개념이 어렴풋하다든지 `긴가민가`하시는 분들에게는 아래의 코딩이 도움이 될 수도 있을 것입니다.

import java.util.Date;
import java.util.* ;
import java.text.SimpleDateFormat;           //여기까지 import하는 부분.

public class SystemDate {
 public static void main(String[] args) {
//변수 선언.
  String today = null ;
  float f = 1000000000 ;
//클래스의 인스턴스 생성.(이렇게 해야 사용이 가능합니다.)
//날짜와 그 형식 Date date = new Date() ; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss") ; //위에 선언된 f를 그냥 써도 되지만 아래와 같이 하는 것이 원칙입니다. Float ff = new Float(f) ; today = sdf.format(date) ; System.out.println("오늘 날짜는 : " + today.substring(0,10)) ; System.out.println(" 고정소수점 표현 방식 : " + ff.longValue()) ; //ff.longValue()대신 f를 쓰게 되면 그 차이점은 //f를 쓰면 지수형태로, ff.longValue()를 쓰면 전부 숫자로 나온다는 겁니다. } }