JAVA Programming for Beginners...

JAVA, 초보

객체지향과 Hello, World!!!

첫번째 프로젝트

객체지향프로그래밍..

 

 

객체지향프로그래밍(OOP)이라는 말을 많이 들어봤습니다.

잘 이해가 안돼더군요...

제가 이해한 방법대로 설명을 해 볼까 합니다.. 정확한지는 모르겠습니다만....

 

 

현실세계의 어떤 사물에 대해 구조화 하기위해, 세 가지의 단계로 구분해 보았습니다.

[개념] -> [청사진] -> [실체]

의 단계입니다.

 

 

첫번째 [개념]의 단계 :

만약, 점이 있다고 합시다.

점은 위치만 있고, 길이나 면적은 없는 하나의 위치 입니다.

개념적으로는 우리는 점을 찍어서는 안됩니다. (점을 찍는 순간, 길이나 면적이 생겨버리기 때문입니다.)

실제적으로 존재하는 점은 현실세계에는 없는 것이지요...

원도 마찬가지로 하나의 위치(점)에서 같은 거리에 있는 점들의 집합 입니다.

아무리 정확하게 원을 그린다 하더라도 현실세계에 존재하는 원은 원의 개념과는 다른 이데아에 대한 모방일 뿐입니다...

무슨 철학얘길 하고 있네요... ^^;

 

 

두번째 [청사진]의 단계 :

개념을 구체화 할 수 있도록 모델을 만드는 단계입니다.

점은 x좌표와 y좌표로 이루어져 있으므로 (x, y)정도로 모델을 만들고,

이 모델로 할 수 있는 일과 이 모델이 하는 행동 또한 규정할 수 있겠지요?

점의 이동이라든지, 점의 복사라든지 하는 것들 말입니다...

이렇게 만들어진 모델을 우리는 클래스라고 부릅니다.

이 클래스를 어떻게 설계하는냐가 객체지향 프로그래밍의 핵심이겠지요?

원은 하나의 점(x, y)과 거리(r)로 이루어져 있겠네요...

원의 넓이, 둘레, 원의 이동, 복사, 영역지정 등도 있을 수 있습니다...

 

 

 

세번째 [실체]의 단계 :

이제 청사진은 마련되었습니다. 하지만 청사진은 모델일 뿐 실체가 아닙니다.

우리는 위에서 만들었던 청사진을 바탕으로 실체를 만들어서 사용해야 합니다.

점A(5, 3), 점B(10, 15) 같이 말이지요.. 그럼 점이라는 개념이 실체화 될 수 있겠지요?

원O(점A, 5) 이런식으로 하면 원이라는 개념 또한 실체화 될 수 있을 것입니다.

이렇게 만들어진 실체를 우리는 인스턴스 혹은 객체라고 부릅니다.

바로 이 인스턴스의 행동과 관계가 우리가 만드려고 하는 객체지향 프로그램이 되는 것입니다...

 

혹시, 제가 이해를 잘 하고 있는 건가요??

 

 

 

자바(JAVA)를 시작합니다...

 

 

자바의 철학

객체지향언어이다.

JVM이라는 가상머신에서 돌아가므로 기계 독립적이다.

프로그래머는 객체의 데이터를 잘 숨겨놓아야 불필요한 데이터 변형을 막을 수 있다.

코드재사용과 문서화는 자바의 장점이다....

 

 

 

이제 첫 번째 프로그램을 만들어 봅시다.

메모장 혹은 아무 텍스트에디터를 열어 아래와 같은 소스코드를 만듭니다..

저장은 지난시간에 만들어 두었던 java_project폴더에 Hello.java로 저장하셔야 합니다. (확장자에 txt나 다른게 붙으면 안됩니다..)

시작 -> 실행 -> cmd

%cd c:\java_project

컴파일은 %javac Hello.java

실행은 %java Hello

로 하시면 결과를 볼 수 있습니다...

 

  1. // First Project with main()
  2. public class HelloJava{
  3.     public static void main(String[] args){
  4.           System.out.println(“Hello, Java!!!);
  5.     }
  6. }
  7. //compile : %javac HelloJava.java .. HelloJava.class라는 바이트코드 생성
  8. //Execute : %java HelloJava .. jvm에서 HelloJava라는 바이트코드를 읽고 실행

 

1, 7, 8 : 주석 - C++과 같이 한 줄 주석은 //로 시작합니다.

2 :  HelloJava라는 클래스를 구성합니다. 이 클래스는 누구나 쓸 수 있는(public)클래스 입니다.

3 :  이 클래스는 어떠한 인스턴스 변수를 포함하지 않으며, 

     유일한 정적메소드main(String[] args)메소드입니다..

     이 main()메소드는 String[](문자열배열)args인자를 받습니다.

     args배열은 명령행인자의 내용을 배열로 받아들이는 것입니다.

     %java HelloJava myname yourname hisname hername

     이라는 명령을 주면 args[0] : “nyname”, args[1] : “yourname”, args[2] : “hisname”

     args[3] : “hername”으로 전달되게 되며, args.length의 값은 4가 됩니다.

4 : System.out.println() 이라는 함수로 화면에 특정 문자열을 출력합니다.

5 : main함수를 끝냅니다.

6 : HelloJava라는 클래스를 종료합니다.

 

--사족!!

 

메모장 프로그램(notepad++)

http://notepad-plus-plus.org/download/v6.7.5.html

다운로드 후.... 설치.. 동의함 다음..다음...다음...

 

머.. 간단하지요??

 

 

----- 실습해보세요 --------------------------------------------------------

%java WhatIsYourName TeacherK

   라는 명령을 넣으면

   My name is TeacherK라고 출력되는 프로그램을 작성해 보세요!!!

 

만약,

   %java WhatIsYourName

   이라고 넣으면

   Usage : java WhatIsYourName needs One argument [java WhatIsYourName name]..

   이라고 출력되도록 작성하세요!!!

 

 

 

* Hello, World!! 를 할 수 있다면, 프로그래밍의 반은 한 것이지요?

 

* 내용에 대한 추가정보

 

- JVM(Java Virtual Machine) : 모든 기계장치에 독립적으로 작동하며 JAVA로 구현된 프로그램을 CPU나 운영체제의 종류에 상관없이 동작하도록 보장하는 장치 혹은 소프트웨어

 - 기계독립적 : 어떤 특정한 기계장치나 OS에 의존하는 것이 아니라 JVM에서 동작하는 것이므로 프로그래머는 메모리 어디에 적재되는지, 얼마만큼의 메모리가 필요한지, 불필요한 메모리를 어떻게 해제하는지 신경쓰지 않아도 되며, 어떠한 장치에서라도 올바르게 동작 할 것이라고 예측해야 한다.

 - 정적메소드 : 정적메소드는 클래스의 인스턴스 변수없이 호출 가능한 클래스수준의 메소드라고 생각하시면 됩니다. 요런 설명도 어렵네요. main함수는 운영체제가 호출하므로, 특정 인스턴스가 만들어져서 호출 되지 않습니다. 이렇게 객체화 되지 않고도 호출되거나 사용될 수 있는 변수, 혹은 함수에 static이라는 한정자를 붙여 정적변수, 혹은 정적메소드로 만들어 사용합니다.

 - 명령행인자 : 도스, 리눅스, 유닉스의 쉘 정도로 생각합시다...

 

다음시간에는 클래스를 만들고, 인스턴스를 생성하여 무언가.. (쉬운걸) 해보도록 합시다..

 

 

 

댓글

댓글 본문