AppleTree iOS

java - 4일째 본문

JAVA/기초 JAVA

java - 4일째

사과나무 2010. 7. 13. 13:40


java package 만들기

new -> package
파일들은 ctrl + c ->ctrl + v 로 옮겨 붙여 놓은다.


1. 자바의 개념 및 특성

 

  * 자바의 분류

  - J2SE: Java2 Standatd Edition
 일반적인  애플리케이션을 요구할때 쓰는언어
  - J2EE: Java2 Enterprise Edition
 중대형  애플리케이션을 요구할때 쓰는언어

  - J2ME: Java2 Micro Edition
 작은 애플리케이션을 요구할때 쓰는언어
 

  * 자바의 특성

1. 운영체제에 독립적이다.

jvm(java virtual machine = 인터프리터) 자바응용프로그램의 명령어(java코드가
컴파일러에 의해 변환된 바이트코드=클래스파일)를 jvm은 해석해서 기계어로 변환한다.
그래서 jvm이 설치되어 있으면 어느 운영체제에서든지 자바로 개발된 프로그램을
실행시킬 수 있다.

 
unis,linux,mac,window etc....

 

2. 객체지향 언어이다.

상속, 다형성, 캡슐화가 잘 적용된 순수한 객체지향언어이다.

 
3. 배우기 쉽다.

4. 자동 메모리 관리

가비지 컬렉터가 자동적으로 메모리를 관리해준다.

5. 네트워크와 분산처리를 지원한다.

6. 멀티쓰레드를 지원한다.

7. 동적 로딩을 지원한다.

실행시 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
일부 클래스가 변경되더라도 전체 어플리케이션을 다시 컴파일하지 않아도 된다.
어플리케이션의 변경사항이 발생해도 비교적 적은 작업으로도 처리할 수 있는 유연한 어플리케이션을 작성할 수 있다.


    
    
    
    
    
  * JVM(Java Virtual Machine)의 메모리

   - 스택영역(Runtime Stack): 실행시 사용하는 메모리 영역

   - 힙영역(Garbage Collection Heap): 동적 메모리 할당영역, 스택영역과 상수영역에서 참조를 하기위한 영역

 - 상수영역(Constant & Code Segment): 상수 데이터 및 Static 데이터 할당영역, 프로그램 시작시 할당되고 프로그램 종료시 소멸된다

   - 레지스터영역(Process Register): 프로세서 실행 관련(주소) 메모리 할당영역


 *  자바의 실행과정

 

.java 파일 -> 컴파일(javac)->.class파일->인터프리터(java)->실행결과

              <- 역컴파일러(javap)     자바의 가장 좋은점!

 

* java에서의 규칙

 

사 용자 정의 명칭(Class, Method, Field)

- 첫글자는 '_' ,'$', 영문 대소문자(한글 가능)

- 글자수에 제한없다

- 공백문자(띄어쓰기) 및 특수문자('_'와 '$'는 예외) 사용불가

- 숫자는 첫글자에서 사용할 수 없다

- 예약어 사용불가

- 일반적으로 클래스 첫글자는 대문자

 

 

1. Byte
Byte

사용 바이트 : 1byte

입, 출력 범위 : -128 ~ 127

byte는 가장 작은 수치를 저장하기 위한 자료형 입니다.

데이터 전송시 많이 쓰이는 자료형인데..

선언을 할시에 범위를 벗어나게 되면 에러가 발생합니다.

만약 범위의 가장 큰수인 127로 선언하고 1을 더하면 어떻게 될까요?

에러가 날까요?
가장 작은 범위인 -128로 됩니다.

자바의 자료형은 이런식으로 돌아갑니다


2.Char

Char

사용 바이트 : 2byte(유일한 unsigned data)

입, 출력 범위 : 0~65,535

저위의 unsigned란 음수가 없다는 뜻입니다.

0부터니까 음수가 없죠?

char는 아스키 코드값을 받습니다.

예를 들어 char c = 65;

라고 선언이 되면 c에는 대문자 A의 아스키 코드가 들어있는 것입니다.

그렇다면 char를 유용하게 쓰기 위해선 아스키 코드를 알고있는 것도 좋겠죠.

3. short

Short

사용 바이트 : 2byte

입, 출력 범위 : -32,768 ~ 32,767

2byte범위의 정수형 자료형으로 ;;

잘은 사용하지 않는 자료형입니다.


Int

사용 바이트 : 4byte

입, 출력 범위 : -2,147,483,648~2,147,483,647

가장 많이 사용하는 int 자료형입니다.

정수 연산시에는 항상 int를 사용합니다.

그만큼 유용하고 많이 쓰이는 자료형입니다. 꼭 기억해 두세요.

예 >
 int i=10;

위와같이 byte형을 연산자로 계산하면 int형으로 값이 나옵니다.

입, 출력 범위도 꼭 외워 두세요. 나중에 사용하는데 유용하게 쓰입니다.

Long

사용 바이트 : 8byte

입, 출력 범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

어마 어마한 입출력 범위 입니다...

int 자료형보다 더 큰 정수형 데이터를 저장하기 위한 자료형 입니다.

입, 출력 범위를 암기할 필요는 없습니다.

! long을 선언하고 초기화 할때에는 꼭 뒤에 'l'(소문자 L) 'L'(대문자 L)을 붙여주셔야 합니다.

예 >

       long l = 1234567L;

이런식으로 해주셔야 됩니다.


java 예약어

abstract        continue       for               new         switch
assert***      default          goto*           package   synchronized
boolean       do                 if                 private      this
break           double          implements  protected   throw
byte             else              import         public       throws
case            enum****      instanceof   return        transient
catch           extends         int              short         try
char             final              interface     static         void
class            finally           long           strictfp**    volatile
const*           float             native         super        while

*     not used
**     added in 1.2
***     added in 1.4
****     added in 5.0

 Java에서 객체지향

# 객체란? 우리가 파악할 수 있는 모든 물체를 객체라 할수 있다. 특성(데이터)과 기능이 한 물체 안에 포함되어 있고 지칭이 가능한 물체이다.
   - 좀 더 작은 범위의 객체들로 분해가능하고 여러 객체가 모여 큰객체를 이루기도 한다.
   - 객체의 구성 : 속성(변수), 기능(메서드)

· 객체 지향 프로그램의 시작 : 실생활의 사물이나 개념을 프로그램 내에서 모델링하여 쉽게 사용할 수 없을까 하는 간단한 아이디어에서 출발. 따라서 기존 프로그램에 비해 인간 친화적이고 직관적으로 프로그램을 작성할 수 있다.

· 객체의 특징 : 객체는 특성(데이터)과 기능을 한 물체의 안에서 가진다.

· 객체 모델링 : 객체의 속성과 기능을 정의하는 것. Java에서는 프로그램 만들때 우선으로 해주는 것이 좋다

· Java에서의 객체지향 3단계
   1단계 : 객체 모델링 : 객체의 속성과 필요한 기능을 정의
   2단계 : 클래스 정의 : 클래스라는 형태로 객체를 표현
   3단계 : 객체 생성과 사용 : 메모리 상에서 객체를 생성하고 사용한다.
1. 객체 모델링
속성 : 변수  기능 : 메서드
볼펜 뚜껑  볼펜 잉크 보호  
볼펜 심  잉크가 나와 글을 쓸 수 있게 해준다.
볼펜 몸체  볼펜 심파손 보호

2. 클래스 정의 : 자바의 모든 객체의 단위, 클래스 하나가 실제 객체 하나를 자바 언어로 정리한 것이다.
   - class의 형태
[접근_제어자][기타_제어자] class 클래스_이름
{
   멤 버변수
   메서드
}
      → { }로 표시된 부분은 클래스의 기능과 성격을 정의하는데 사용되는 옵션 부분이다.
      → 클래스의 내부는 { }안에서 정의된다.
      → 속성은 멤버변수, 기능은 메서드로 정의된다.

      - class 따라하기
   ① class의 이름 결정 : 객체의 이름에서 적당히 만들면 된다.
ex) 자동차를 객체 모델링하려면 적당히 Car라 이름짓는다.
class Car
{
}
# 주의점 : 클래스 이름은 공백이 없어야 한다. 또, 대문자로 시작해야 한다.

   ② 멤버변수의 정의 : 객체 모델링 후 속성은 멤버변수로 표현한다.
# 멤버변수란? 클래스 안에서 속성을 정의하기 위해 사용되는 변수이다.
# 멤버변수의 선언 : 일반 변수의 선언과 거의 유사하다.
[접근_제어자][기타_제어자] 데이터형 변수_이름;
주 의점 : 메서드 내부가 아닌 클래스 안에다 직접 적어 줘야한다.
ex)
class Car
{
   int speed; //속도는 정수형으로 선언
   int count; //바퀴수는 정수형으로 선언
   string name; // 차의 이름은 String 레퍼런스 변수로 선언
}
멤버 변수는 int speed, int count, string name이다.
   → 일반 변수와 마찬가지로 멤버변수도 자바 기본 데이터형 뿐만 아니라 레퍼런스 변수(다른 객체를 나타냄)도 멤버변수로 사용이 가능하다

   ③ 메서드(method)의 정의 : 객체의 기능을 표현함.
# 메서드와 C언어와의 비교 : 메서드는 C언어의 함수와 하는 역할, 정의 방법이 유사하다.
# 메서드와 C언어와의 차이 : 메서드는 독립적으로 호출이 안되고 클래스나 객체와 같이 사용해야한다.
# 정의법
[접근_제어자][기타_제어자] 반환형 메서드_이름(인자들)// 메서드_이름을 반환자라고도 한다.
{
}
   → 반환형 : 메서드가 실행하고 난 결과를 넘겨줄 때, 어떤 형으로 넘겨줄 것인지를 결정한다.
ex) int : 정수형, float : 실수형, void : 아무것도 안 넘겨줌.
   → 인자들 : 일반적인 변수를 선언할 때와 같은 방식
   → 주의점 : 메서드_이름을 소문자로 시작한다.
ex)
void speedUp() //Speed Up과는 다르다
{
   speed = speed + 1;
}
   - 중요 : 메서드 내에서는 멤버변수를 마음대로 사용하는 것이 가능하다.

3. 갹체의 생성과 사용 : 클래스를 정의하고 사용하기 위해서는 반드시 메모리에 생성해야 한다.
· 인스턴스(객체) : 메모리상에 생성된 클래스라고 한다. 프로그램을 실행했을 때 메모리에 상주한다.
# 생성법 : 메모리상에 생성하려면 new연산자를 통해 명시적으로 생성을 해주어야 한다.
# 인스턴스 생성이 필요한 이유는? 클래스 자체는 객체를 정의한 것에 불과하고 실제로 사용하기 위해서는 메모리 상에 올라와야 하기 때문이다.
▶ '실제' 객체와 클래스, 인스턴스(객체)의 관계
비행기  →  비행기 클래스  →  ○ ○ ○
배  →  배 클래스  →  □ □
자동차  →  자동차 클래스  →  △ △
객체  클래스  인스턴스
객체 : 객체로 모델링될 대상, 클래스 : 클래스의 정의, 인스턴스 : 객체
   → Java에서 객체의 표현은 클래스로 정의되고 클래스를 사용하기 위해서는 메모리상에서 인스턴스로 생성되어야 한다.

· 모든 인스턴스는 레퍼런스 변수만을 통해서 사용이 가능하다.
# 레퍼런스 변수의 역할 : 메모리상에 생성된 인스턴스(객체)를 가리키는데 사용된다.
# 주의점
  - 모든 인스턴스는 레퍼런스 변수만을 통해 사용이 가능하다.
  - 레퍼런스 변수는 데이터를 넣어두는 값이 아닌 인스턴스(객체!)를 가리키는 값이다. 레퍼런스 변수는 인스턴스의 멤버변수와 메서드를 가리킨다.

# 레퍼런스 변수를 이용할 때 인스턴스의 멤버변수와 메서드의 사용법
   레퍼런스 _변수.멤버변수 or 레퍼런스_변수.메서드( )
ex)
class Money
{
   String name;
   int age;

   int money void sum(){
   money = money +(age * 0.08);
   }

public static void main(string args[])
{
   Money st;
   st= new Money();
   st.name=" 주인장";
   st.age="18"
   st.money=35000;
   st.sum();
   System.out.println(" 이름 나이 용돈");
   System.out.println(st.name+" "+st.age+" "+st.money);
}


 

'JAVA > 기초 JAVA' 카테고리의 다른 글

java - 6일쩨(source)  (0) 2010.07.15
java - 5일째 (source)  (0) 2010.07.14
java - source file  (0) 2010.07.12
java - 3일째  (0) 2010.07.12
java - 2일째 source  (0) 2010.07.09
Comments