2008. 7. 22. 20:45

2장 미션임파서블 - 객체지향을 이해하라.

구조적 방법론에서는 작은 단위로 나누어서 해결하는 '나누어서 정복한다(divide and conquer)' 모토로 운영이 된다. 하지만 객체지향 방법론에서의 문제 해결은 추상화(abstraction), 캡슐화(encapsulation), 모듈성(modularity), 계층성(hierarchy)이라는 4가지 개념으로 요약할 수 있다.
객체지향 방법론이 구조적 방법론과 배타적인 개념을 강조하는 것이 아니라 구조적 방법론의 장점을 포함하는 것이다.

추상화는 보다 중요하고 필수적인 사항을 다루려고 하는 것이며 이때 중요한 것은 무엇이 중요한지, 무엇이 덜 중요한 것인지를 직관적으로 판단할 수 있어야 한다는 것이다.
캡슐화는 말 그대로 중요하고 세부적인 구현 방법에 대한 자세한 사항을 캡슐 안에 꼭꼭 숨겨놓는 것이다.
캡슐화는 데이터 감추기(data hiding)라고도 한다.
모듈성이란 크고 복잡한 것을 좀 더 작고 관리할 수 있는 조각으로 나누어, 이들 조각을 독립적으로 개발할 수 있게 하는 것이다. 객체로 명명한다.
계층성이란 보편적인 것을 상위에 두고 특수한 것을 하위에 두는 것을 말한다. 등급이나 순서에 따라 계층적인 구조로 조각들을 배열하는 것을 말한다.

객체란 애플리케이션에서 명확한 한계와 의미를 갖는 사물이나 개념 또는 추상화로서, 특성과 행위 그리고 정체성을 하나의 단위로 포함하여 캡슐화하는 것을 말한다.
특성 : 해당 객체에 저장되어 있는 정보
행위 : 해당 객체가 행동하거나 반응하는 방법을 결정
정체성 : 해당 객체를 다른 객체와 구별 짓게 하는 식별 값
2008. 7. 22. 01:52

각 사용유형별 이클립스 단축키

[각 사용유형별 이클립스 단축키]

최소한 외워야 하고 손에 익숙해야 할 것들을 정리 한다.




Edit
Content Assist : CTRL + SPACE
- 코드 작성을 도와준다. 자동완성을 지원함

Navigate
Open Type Hierarchy : F4
- 현재 클래스의 상속관계를 보여주는 창이 열린다.
Quick Hierarchy : CTRL + T
- 간단하게 현재 클래스의 상속 관계를 보여준다.
Quick Outline : CTRL + O
- 현재 클래스의 메서드, 맴버변수등을 보여준다.

Refactor
Refactor Quick Menu : ALT + SHIFT + T
- 리펙토링 메뉴 바로가기
Rename : ALT + SHIFT + R
- 변수명, 클래스명 등 이름 변경

Source
Add Block Comment : CTRL + SHIFT + /
- 선택된 영역에 대해 주석 처리
Remove Block Comment : CTRL + SHIFT + \
- 주석처리 된 영역 주석 해제
Add Javadoc Comment : ALT + SHIFT + J
- Javadoc타입의 주석 붙임
Format : CTRL + SHIFT + F
- 탬플릿에 지정된 대로 코드 포맷 변경
Indent Line : CTRL + I
- 제대로 된 위치의 들여쓰기
Organize Imports : CTRL + SHIFT + O
- 필요없는 import 제거
Source Quick Menu : ALT + SHIFT + S
- 빠른 소스메뉴
Toggle Comment : CTRL + /
- 한줄에 대한 주석 처리

Text Editing
Delete Line : CTRL + D
- 줄 삭제
Duplicate Lines : CTRL + ALT + UP or DOWN
- 줄 복사
Insert Line Above Current Line : CTRL + SHIFT + ENTER
- 현재 줄에 새로 추가
Insert Line Below Current Line : SHIFT + ENTER
- 다음 줄에 새로 추가
Next Word : CTRL + RIGHT
- 다음 문자로 이동
Previous Word : CTRL + LEFT
- 이전 문자로 이동

Window
Maximize Active View or Editor : CTRL + M
- 선택된 뷰 최대화
Switch to Editor : CTRL + SHIFT + E
- 열려있는 에디터간 이동
2008. 7. 21. 00:37

7월17일자 KBS TV 아침마당을 다시보기로 보세요. - 포스팅 진행중

http://asx.kbs.co.kr/player.html?title=아침마당&key=39&url=1TV$20080717$am_plaza20080717_01_00_00_m&type=201&chkdate=20080730182022&kind=300_2week#


17일 아침 게으름을 이기지 못하고 9시를 넘겨서 일어나 버렸다.
후회 막급 (" 아! 아침부터 결심이 흔들리다니... 망했다 ㅠㅠ)
후회 막급도 잠시, 습관적으로 리모콘에 손이 갔는데... 아침마당으란 프로가 생방송으로 하고 있었다.

이 프로의 핵심은 미 여 사 에게 00을 이란 표현이었는데...

1. 미 : 미래이력서를 세워라
미래이력서란 앞으로 내 인생 5년, 10년 그 이상의 내 미래에 대한 이력서를 작성하는 것이다.
이력서를 작성하고 난 후, 내 이력서가 사실이 되기 위해서 어떤 절차와 노력을 거쳐야 하는지 검토하고 실행에 옮기는 것이다.
(아직 미래이력서를 작성하지 못했음. ㅋㅋ)
2.

P.S 누군가 이 글을 보고 포스팅을 이어 갔으면 좋겠다. ^^;

'평가,코멘트,하고싶은말' 카테고리의 다른 글

개발자의 연봉에 관한 글  (0) 2008.09.23
추천서적들  (0) 2008.08.14
너네 공부하는 그룹 말이야~  (0) 2008.08.05
글이 안올라오네 ㅋㅋㅋ  (0) 2008.08.02
훔 글이 없네.  (0) 2008.07.15
2008. 7. 21. 00:28

1장 객체지향 - 이것이 무엇에 쓰는 물건인고

객체지향 언어가 사용된 스몰토크(Smalltalk)에서는 MVC(model-view-controller) 패턴이 사용되었는데
MVC 패턴이란 데이터를 관리하는 놈(model), 데이터를 보여주는 놈(view), 프로그램의 흐름을 좌지우지하는 놈(controller)으로 구성되어 있다.
요즘 나오는 대부분의 소프트웨어 아키텍처(software architecture)들은 이러한 유형을 따르고 있다.
ex : C++, 윈도우 DNA 아키텍처, 자바 등
3계층의 구성 요소들 사이의 프로토콜 즉 통신 방법에는 여러가지가 있다.
ex : COM/DCOM/COM+, COBRA, EJB, XML 등

소프트웨어 개발방법
1. 구조적 방법 : 대표언어 C이며 하나의 프로그램이나 시스템은 잘게 쪼개진 여려 개의 세부적인 것으로 구성되어 있는 것으로 간주되는 개념이다. 피라미드 형식이나 그물과 같은 구조의 형식을 지칭한다.
구조적 언어의 단점 중 하나는 프로그래밍 언어가 프로그램의 실행 흐름 즉, 절차에 치중한다는 것이다.
하지만 프로그램에서 중요한 것은 절차만이 아니며 중요정도에서는 데이터가 더 큰 비중이 있다고 할 것이다.
그러나 절차적 프로그래밍 언어에서는 데이터와 그것을 처리하는 절차를 구분시켜 놓으므로써, 데이터를 소홀히 하는 단점이 있다.
이것의 결과로 데이터와 그 데이터를 처리하는 절차가 분리되어 있어서 코드가 복잡해 지거나 조금 더 편리해지기 위해 보다 중요한 데이터를 전역 변수로 정의하여 권한이 없는 다른 함수에서도 접근할 수 있게 하는 문제점을 노출하기도 한다.
2. 객체지향 방법의 핵심은 데이터와그 데이터를 처리하는 절차를 하나의 단위로 묶어 놓는데에 있다. 또 같은 단위에 속해있는 절차 즉, 코드를 통해서 데이터에 접근하게 함으로써 보다 중요한 데이터를 보호할 수 있게 한다.

C++이 객체지향 개념을 포함하며 본격적인 객체지향 언어로 입지를 굳혔으나, 인터넷의 특징을 손쉽게 활용할 수 있는 자바언어가 대두되게 되었다.
자바 언어에서 모든 객체는 포인터 대신에 레퍼런스(reference)를 통해 접근하게 되며, 객체의 소멸은 자바 가상 머신(Java virtual machine) 안에 있는 가비지 컬렉터(garbage collector)가 대신 처리해주므로 프로그래머는 delete 연산자를 사용하지 않아도 되게 되었다.

객체지향 방법은 하나의 소프트웨어 시스템을 여러 개의 객체로 구성된 것으로 간주한다. 각 객체는 독립적으로 고유한 기능과 서비스를 제공하며, 전체 소프트웨어 시스템을 구성하는 하나의 논리적인 구성 요소가 된다.
각 객체가 전체에 포함된 일부로서가 아니라 독립적인 것으로 간주되기 때문에 해당 객체의 기능르 독립적으로 향상시킬 수도 있고 다른 소프트웨어 시스템에도 재사용할 수 있으며, 또한 사용자의 요구 사항이 변경되는 경우에도 손쉽게 대응할 수 있다는 이점을 갖게 된다.

용어 설명
1. 애플릿(applet) : 웹 서버에서 다운로드된 후에는 웹 서버의 자원을 사용하지 않고 사용자와 상호작용하며 작업을 수행하는 자바 언어로 만든 작은 애플리케이션
2. 모델링 언어 UML(Unified Modeling Language) : 설계자와 사용자가 서로 의사 소통을 하는데 사용하는 말을 모델링 언어라 하며, 객체지향 방법론에서는 주로 UML이라는 모델링 언어를 사용한다.
UML이란 소프트웨어 시스템을 시각화하고 명세화하고 구축하고 문서를 작성하는데 사용하는 그래픽으로 표현되는 언어(a graphical language for visualizing, specifying, constructing, and documenting the artifacts of a software-intensive system) 라고 정의된다.

P.S 객체지향 이야기는 한장씩 읽어나가야 하는데 첫장을 포스팅 하기 너무 힘들었다. 왜냐고??? 좀 읽다가 졸았기 때문에... ㅋㅋ 아무튼 이 시간에 포스팅을 시작해서 좋다. ^0^
2008. 7. 20. 23:01

chapter 6. 자바 API를 알아봅시다.

자바에는 클래스 수백 개가 내장되어 있습니다. 우리는 필요한 것을 찾는 방법을 알아내어 자신의 애플리케이션에서 사용할 부분만 새로 만들면 됩니다.

자바 API에서 클래스는 패키지 단위로 묶여 있습니다.
API에 들어있는 클래스를 사용하려면 그 클래스가 어떤 패키지에 들어있는지 알아야합니다.
자바 패키지의 종류는
java.lang : 필수 요소
java.util : 자바 유틸리티
java.swing : 스윙 클래스

어떤 클래스를 사용하려면 클래스의 전체 이름을 알아야합니다.
ArrayList 는 java.util 패키지에 들어있으며 java.util.ArrayList 로 쓰면 됩니다.

패키지의 클래스를 사용할지 알려주는 방법은 아래와 같습니다.
1. import 선언문을 쓰는 경우
소스 코드 파일 맨 위에서 import 선언문을 사용합니다.
import java.util.ArrayList;
public class MyClass {...}
2. 일일이 입력합니다.
코드에서 일일이 전체 이름을 입력합니다. 언제,어디서나 직접 타이핑을 해야한다는 단점이 있네요.
객체를 선언하고 인스턴스를 만들 때:
java.util.ArrayList<Dog> list = new java.util.ArrayList<Dog>;
인자 유형으로 사용할 때 :
public void go(java.util.ArrayList<Dog> list) {}
리턴 유형으로 사용할 때 :
public java.util.ArrayList<Dog> foo() {}

ArrayList에 들어있는 메소드는 아래와 같습니다.
add(Object elem) : 객체 매개변수(elem)를 목록에 추가합니다. -> 뭔가를 집어넣을 때
romove(int index) : index 매개변수로 지정한 위치에 있는 객체를 제거합니다 -> 뭔가를 제거할 때
indexOf(Object elem) : 객체 매개변수(elem)의 인덱스 또는 -1을 리턴합니다 -> ArrayList에 들어있는 어떤 것의 위치를 확인하거나 알고 싶을 때
isEmpty() : 목록에 아무 원소도 없으면 '참'을 리턴합니다 -> ArrayList가 비어있는지 확인할 때
size() : 현재 목록에 들어있는 원소의 개수를 리턴합니다 -> ArrayList의 크기(원소의 개수)를 알고 싶을 때
length : 일반 배열의 길이(원소의 개수)를 알고 싶을 때
cotains(Object elem) : 객체 매개변수(elem)에 매치되는 것이 있으면 '참'을 리턴합니다.
get(int index) : 주어진 index 매개변수 위치에 있는 객체를 리턴합니다.

1. ArrayList는 필요에 따라 그 크기가 동적으로 바뀝니다. 객체가 추가되면 커지고, 제거되면 작아집니다.
2. ArrayList에 저장할 객체 유형은 유형 이름을 <>안에 집어넣은 형태의 유형 매개변수(type parameter)로 선언합니다. ex : ArrayList <Button> 은 Button(또는 Button의 서브클래스) 유형의 객체만 넣을 수 있는 ArrayList
3. ArrayList에는 원시 유형의 값은 저장할 수 없고 일반 객체만 저장할 수 있지만, 컴파일러에서 원시값을 Object 객체로 감싸고 그 객체를 원시 유형이 아닌 ArrayList에 저장하는(또는 그와 반대로 가는) 일을 자동으로 처리해줍니다.
4. java.lang을 제외한 다른 패키지에 들어있는 클래스를 사용하려면 전체 이름을 알려줘야 합니다.

ArrayList와 일반 배열의 차이점
1. 기존의 일반 배열은 만들어질 때부터 유형과 이름이 정해지지만, ArrayList에서는 ArrayList 유형의 객체만 만들면 됩니다. 객체를 추가하거나 제거하면 자동으로 커지거나 작아지므로 크기를 따로 지정할 필요가 없어요.
ex : new String[2]
      new ArrayList <String>{}
2. 객체를 일반 배열에 집어넣을 때는 위치를 지정해야 합니다.(즉 0이상, 배열의 길이에서 1을 뺀 숫자 이하의 인덱스를 지정해야 합니다) ex : myList[1] = b;
ArrayList는 add(정수,객체) 메소드를 써서 인덱스를 지정하거나 그냥 add(객체)라고만 하면 자동으로 새로 추가된 객체가 들어갈 자리가 만들어집니다. ex : myList.add(b);
3. 배열을 쓸 때는 자바의 다른 부분에서는 쓰지 않는 배열 전용 문법을 써야 합니다.
하지만 ArrayList는 일반 자바 객체기 때문에 특별한 전용 문법을 쓸 필요가 없습니다.
ex : myList[1] -> 배열전용 대괄호([])는 배열에서만 쓰이는 특별한 기호입니다.
4. 자바 5.0에서는 배열이 매개변수화되어 있습니다.
ArrayList<String> : <>안의 String은 "유형 매개변수(type parameter)"입니다.

초강력 부울 표현식
'AND'와 'OR' 연산자 '&&' , '||'
1. 가격이 300달러 이상, 400달러 미만이면 X를 선택한다
if (price >= 300 && price <=400 ) {
camera = X;
}
2. 카메라 브랜드가 총 열개 있는데 그 중 브랜드 몇개에 대해 어떤 작업을 하고 싶을 경우
if (brand.equals("A") || brand.equals("B")) {
A 브랜드 또는 B 브랜드에만 적용할 내용
}
같지 않음 ( != , ! )

P.S 소스 코드를 이해하는 부분은 2차 개정판에서 다룰 예정입니다.
Heas First 자바를 두번이상 읽을수 있는 시간을 꼭 내겠습니다. ^^;

2008. 7. 16. 19:11

chapter 5. 프로그램 만들기

클래스 개발 일반론

1. 클래스에서 어떤 것을 해야 하는지 파악한다.
2. 인스턴스 변수와 메소드 목록을 작성합니다.
3. 메소드를 만들기 위한 준비 코드를 만듭니다.
4. 메소드에 대한 테스트 코드를 만듭니다.
5. 클래스를 구현합니다.
6. 메소드를 테스트합니다.

각 클래스별로 준비 코드, 테스트 코드, 실제 코드
준비 코드 : 논리 위주의 유사코드를 표현한다. (어떻게 해야할지가 아니라 무엇을 해야할지를 기술한다.)
테스트 코드 : 실제 코드를 테스트하고 작업이 제대로 처리되는지 확인하기 위한 클래스 또는 메소드(준비 코드를 기준으로 작성한다.)
실제 코드 : 클래스를 실제로 구현한 코드

익스트림 프로그래밍 방법(XP)
조금씩, 하지만 자주 발표한다.
사이클을 반복해서 돌리면서 개발한다.
스팩에 없는 것은 절대 집어넣지 않는다.
테스트 코드를 먼저 만든다.
모든 테스트를 통과하기 전에는 어떤 것도 발표하지 않는다.
조금씩 발표하는 것을 기반으로 하여 현실적인 작업 계획을 만든다.
모든 일을 단순하게 처리한다.
두 명씩 팀을 편성하고 모든 사람이 대부분의 코드를 알 수 있도록 돌아가면서 작업한다.
효과
야근을 안한다. 항상 정규 일과 시간에만 작업을 할 수 있다.
기회가 생기는 족족 언제 어디서든 코드를 개선 할 수 있다.

for 순환문

for ( int i=0 ; i < 100 ; i++ ) { }
이 코드는 정수형 변수 i를 0으로 초기화하고 i가 100보다 작을 경우 i를 후증가연산자로 계속해서 순환하라는 뜻

int i = 0
초기화 : 변수를 선언하는 부분
i < 100
부울 테스트 : 조건 테스트가 들어가는 자리(부울값을 리턴하는 메소드가 들어가는 경우도 있다.)
i++
반복 표현식 : 순환문이 한 번 반복될때마다 실행할 내용이 들어감

for와 while의 차이점
while 순환문은 부울 테스트만 들어갈 수 있다. 초기화 및 반복 표현식을 내장 시킬 수 없다.
반복 횟수를 알 수 없을 때 어떤 조건이 만족되는 동안 계속 반복하는 경우에 유용하다.

for 순환문은 반복 횟수를 알고 있을 경우 유용하다.

++ , -- : 선/후 증가/감소 연산자
변수의 앞 뒤에서 쓰일 경우 변수 +1, -1 의 효과를 가져온다.
int x = 0 ; int z = ++x ;
int x = 0 ; int z = x++ ;

향상된 for 순환문
" String[] nameArray = { " ", " ", " " }; "
for (String name : nameArray) { }
위 코드는 nameArray에 들어 있는 각 원소에 대해서 각각의 원소를 name 변수에 저장한 다음 순환문을 실행시킨다.

String name : 선언된 변수(nameArray) 유형인 String와 반드시 동일해야 한다.
: -> in의 의미
nameArray : 반복 작업의 대상이 되는 원소들의 컬렉션

String을 int로 변환하는 방법
Integer.parseInt("3")
Integer : 자바 클래스 라이브러리에 있는 클래스로 숫자를 나타내는 String을 받아서 그 문자열을 진짜 숫자로 변환 해 주는 기능이 있는 클래스
parseInt : String을 그 문자열이 나타내는 int로 '파싱하는' 방법을 알고 있는 Integer 클래스 안에 들어있는 메소드

2008. 7. 16. 10:41

chapter 4. 메소드에서는 인스턴스 변수를 사용합니다.

클래스에서는 객체가 아는것과 하는것을 정의한다.
인스턴스 변수는 객체가 아는것이고 메소드는 객체가 하는것이다.

메소드에 뭔가를 보내거나 돌려받을 수 있습니다.
메소드에서 사용하는 것은 매개변수(parameter), 전달하는 것은 인자(argument)라고 한다.

Dog d = new Dog();                     d라는 레퍼런스 변수에 bark라는 메소드를 호출하고 3 인자값을 전달한다.
d.bark(3);
void bark(int numOfBarks) {          3이라는 인자는 numOfBarks에 전달이 된다.
while (numOfBarks > 0) {
System.out.println("ruff");
numOfBarks = numOfBarks -1 ;      numOfBarks 이라는 매개변수는 메소드 내에서 변수로 쓰인다.
}
}

메소드에서 매개변수를 받도록 선언했다면 그 메소드를 사용할 때 반드시 뭔가를 전달해야 하는데 이 뭔가는 반드시 정해진 유형의 값이어야 한다.

메소드에 인자 두 개 이상을 전달 할 수 있으며,
변수의 유형이 매개변수 유형과 일치한다면 변수를 매개변수로 전달할 수도 있다.

자바는 값을 전달한다 ( 복사본을 전달하는 것이다.)   

메소드를 선언할때는 반드시 리턴유형을 지정해야 한다.(void로 지정하면 아무것도 리턴하지 않는다.)
void가 아닌 리턴 유형을 지정했을 경우 반드시 선언된 리턴 유형과 호환 가능한 값을 리턴해야 한다.

매개변수와 리턴 유형의 활용 방법
개터(getter) : 어떤 값을 리턴값 형태로 받아오기 위한 용도
세터(setter) : 어떤 값을 인자로 받아서 인스턴스 변수를 그 값으로 설정하기 위한 용도

캡슐화 : 모든 인스턴스 변수는 세터 메소드를 만들어서 직접 접근할 수 없도록 한다.
인스턴스 변수는 private로 지정하고 게터와 세터는 public로 지정해서 데이터를 숨긴다.

인스턴스 변수와 지역변수의 차이점
인스턴스 변수 : 유형과 이름이 들어가므로 어떤 값을 대입하지 않거나 세터 메소드를 호출하지 않은 경우에는 기본값이 호출 된다.
지역 변수 : 기본값이 없으므로 사용하기 전에 반드시 초기화를 해야 한다.

원시변수와 객체 레퍼런스 변수를 비교할때는 == 연산자를 이용하면 된다.

'Java > Head First 자바' 카테고리의 다른 글

chapter 7. 상속과 다형성  (1) 2008.07.22
chapter 6. 자바 API를 알아봅시다.  (0) 2008.07.20
chapter 5. 프로그램 만들기  (2) 2008.07.16
chapter 3 원시변수와 객체 레퍼런스 변수  (0) 2008.07.15
chapter 1,2  (1) 2008.07.12
2008. 7. 15. 23:14

chapter 3 원시변수와 객체 레퍼런스 변수

3. 원시변수와 레퍼런스
변수는 원시변수와 객체 레퍼런스로 나누어지며, 이전까지는 변수를 객체상태(인스턴스 변수)지역 변수(메소드 안에서 정의된 변수)로만 사용했으나,
이번장에서는 추가적으로 인자(호출하는 코드에 의해 메소드로 전달되는 값)
리턴 유형(메소드를 호출한 부분으로 돌아가는 값)으로도 사용한다.

자바는 유형을 철저히 따진다(byte에 short나 int 변수를 집어넣지 못한다)
변수는 유형과 이름을 반드시 갖고 있어야 한다.

숫자원시변수는 아래와 같다
이름                크기
byte                8비트(-128~127)
short               16비트(-32768~32767)
int                   32비트
long                64비트

(부동소수점 소수)
float                32비트
double            64비트

변수에 값을 대입하는 방법
등호 옆에 리터럴 값을 입력하는 방법(x=12, isGood=true 등)
한 변수의 값을 다른 변수에 대입하는 방법(x=y)
두가지를 병행하는 방법 (x=y+2)

변수 생성 규칙
알파벳, 언더바(_), 달러($)로 시작해야 한다.(숫자로 시작 안됨)

예약어를 이름으로 사용해서는 안된다
BCBILFD (boolean, char, byte, int, long, float, double)

myDog.bark(); -> myDog라는 변수로 참조할 수 있는 객체를 이용하여 bark()메소드를 호출하라는 의미

Dog myDog = new Dog();
myDog라는 레퍼런스 변수를 생성합니다(Dog 유형의 변수네요.)
힙에 새로운 Dog 객체를 위한 공간을 마련하도록 합니다.
새로운 Dog 객체를 myDog 레퍼런스 변수에 대입합니다.

int [] nums ; -> int 유형의 nums 레퍼런스 변수를 정의한다.
nums = new int[7]; -> 길이가 7인 새로운 int 배열을 생성하고 nums 라는 int[] 변수에 대입한다.
2008. 7. 15. 19:10

훔 글이 없네.

매일 매일 한개 이상 포스팅 하기!

어때?
2008. 7. 12. 01:09

chapter 1,2

자바로 할 수 있는 일은
소스를 만들어 컴파일을 하면 클래스 파일이 나오고 클래스 파일을 자바가상머신에서 실행을 시켜서 소스에 대한 결과값을 얻는것.

자바 코드의 구조는
자바 소스파일 - 클래스 - 메소드 - 선언문의 구조로 이루어져 있다.

main 메소드엔 뭐가 들어갈까?
뭔가를 하는 선언문, 뭔가를 여러번 반복하는 순환문, 조건에 따라 뭔가를 하는 분기문이 들어간다.

객체와 클래스
객체는 클래서 내부에서 돌아가는 부분이며
객체에서 아는것을 인스턴스 변수라 하고 객체에서 하는것을 메소드라 한다.

객체는 클래스 안에서 실행이 되며, 객체지향적인 프로그래밍을 한다는 것은
공통된 클래스(1개 또는 여러개)를 만들어 클래스 상호간에 상속을 통해 움직이거나
예외의 경우에는 오버라이드를 통해 별도로 움직일 수 있다는 것.

객체는 두개의 클래스(진짜 클래스, 테스트클래스-main 메소드가 위치)를
가지고 만들 수 있다.

main 메소드의 용도는 클래스를 테스트 하는것과 자바 애플리케이션을 시작하기 위한 용도이다.

P.S JDK를 설치해서 컴파일이 실행이 안되는 오류를 해결하지 못함.
editplus에 컴파일과 실행을 세팅했는데. 제대로 값이 나오는지를 확인하지 못함.