본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]이상만 12월 9일

by 알 수 없는 사용자 2011. 12. 12.
728x90
반응형

// 정적변수를 이용하여 생성된 Circle객체의 개수를 해아리는 프로그램

import java.io.*;

public class CircleArea 

    public static void main (String[] args) throws IOException 
  {
        BufferedReader stdin = new BufferedReader(new InputStreamReader (System.in));

        int rad, xPos, yPos;    // 지역변수
        String aString;      // 객체 참조 변수
        Circle aCircle;
        
        while(true// NULL과 같지않냐?
        {
            System.out.print ("\nEnter the radius <type enter-key to quit>: ");
            aString = stdin.readLine();
            if(aString.equals (""))
            {
                  break;
            }
            rad = Integer.parseInt (aString);
            System.out.print ("Enter the x coordinate of origin: ");
             xPos = Integer.parseInt (stdin.readLine());
            System.out.print ("Enter the y coordinate of origin: ");
            yPos = Integer.parseInt (stdin.readLine());

            aCircle = new Circle (xPos, yPos, rad);      
            aCircle.create();
        }      
        System.out.println ("This is the end of program."); 
    }
}

class Circle 
{
    static int count = 0;            // 정적 변수
    static final double PI = 3.14;   // 상수 (final : #define 과 같은 역할)
    int radius;                      // 원의 반지름    {
    int xCenter;                     // 중심의 x좌표  인스턴스 변수.
    int yCenter;                     // 중심의 y좌표   }

    Circle (int x, int y, int rad) 
    {
        xCenter = x;
        yCenter = y;
        radius = rad;
        count++;
    }
   
    void create()
    {
        System.out.println (count + " Object created."); 
    }
    double area() 
    {
        return  radius * radius * PI;
    }  // method area

    double circumference() 
    {
        return 2 * radius * radius * PI;
    }
}


클래스 =>붕어빵틀 : 실제로 존재하지 않는 것. (class Circle { .... })
객체참조변수 =>곧만들어질 붕어빵 : 클래스에 이름을 부여. (Circle aCircle;)
객   체 => 붕어빵의 종류가 결정된것 (팥 슈크림) : 객체참조변수에 공간을 확보. 인스턴스 객체라고도함
              (aCircle = new Circle (xPos, yPos, rad);)
인스턴스 변수 => 클래스의 지역변수 (같은 클래스에 속하는 모든 객체가 서로 다른 메모리 공간을 차지함)
정적 변수 => 클래스의 static변수 (같은 클래스에 속하는 모든 객체가 공유하며 객체를 생성하지 않아도 이미 존재한다.)

static 
:객체를 new 연산자를 이용하여 생성했을 때 비로소 메서드니 멤버 변수들이 메모리를 확보하게 된다. 따라서 new 연산자로 객체를 생성하지 않고서는 객체의 메서드니 멤버 변수들을 사용할 수 없다. 하지만 이러한 절차를 거치지 않고 멤버변수나 메서드를 사용할 수 있다. 

바로 이 static 이란 키워드 때문이다. static 은 객체가 메모리에 생성되기 전에 먼저 메모리상에 로딩되어진다. 이는 굳이 객체 변수를 생성하지 않고 변수나 메서드를 사용할 수 있다는 뜻이다...이 얼마나 편한가..

static 특징

1. 멤버 변수와 메서드에 사용. 
2. 객체를 만들지 않고 접근이 가능하게 해준다. 
3. static으로 정의하면 객체가 생성되기 전에 미리 메모리에 로딩 
4. 클래스명으로 접근이 가능 
5. 메서드내에는 static 변수를 선언할 수 없다.(즉 지역변수에 사용불가) 

c++의 경우

class A
{
      static void test()
     ....


A::test(); 


java의 경우

class A
{
     static void test()
     ....
}
 
class B
{
     A.test();


C++초기화

class A
{
     static int a = 3;
     
     A()
     :a(3)

     {
     }



추가 인스턴스변수 / 지역변수 /  정적 변수 

인스턴스 변수 - Instance variable
1. 생성 장소 : 힙 (가비지 컬렉션 기능이 있는 힙)
2. 사용 범위
 1) 선언된 클래스 내부 : 어디서나 참조(사용) 가능
 2) 선언된 클래스 외부 : 접근변경자(public/private/default/protected)에 의해 사용 범위가 결정됨
3. 생명 주기 : 해당 인스턴스가 힙에 있는 동안 살아 있음

지역 변수 - Local variable
1. 생성 장소 : 스택
2. 사용 범위 : 선언된 블록이나 메소드 안에서만 사용 가능
3. 생명 주기 : 선언된 블록 안에 있는 동안 / 선언된 메소드가 스택에 있는 동안 살아 있음

정적 변수 (Static variable/field, 클래스 변수;Class variables)
1. 생성 장소 : 클래스 영역 (코드 메모리 영역)
2. 사용 범위 : 인스턴스 변수와 같음
3. 생명 주기 : JVM이 해당 클래스를 로딩한 시점 ~ 해당 세션이 죽을 때까지
4. 공유 :  해당 클래스의 모든 인스턴스가 공유


const : 전반적인 의미포함
(1) const의 개념적 이해 
1) 변수 선언 앞에 붙어 변수를 상수화하며 반드시 초기화 해야 한다. 그렇지 않으면 쓰레기 값으로 상수화 된다.
2) 포인터 선언 앞에 사용하여 포인터를 통한 변수의 접근을 금지
3) 포인터 이름에 사용하여 포인터 자체를 상수화

(2) 멤버 변수의 상수화, 초기화
- 멤버 변수 상수화 : const 사용
- 멤버 변수 초기화 : const 로 선언된 멤버 변수는 쓰레기 값으로 이미 초기화 되므로 값의 변경이 불가하다. 
- 멤버 이니셜라이저를 사용하면되는데 잘모르겠음 알려주심~~!!

(3) const 멤버 함수
ex) void function (...) const {...} // 함수이름 뒤에 const 를 사용함에 유의
- 멤버함수 상수화의 의미

1) 멤버 변수의 조작 금지
2) 멤버 변수의 포인터(주소) 반환 금지

포인터를 반환하고자 한다면 -> 함수의 리턴타입 (포인트형) 을 상수화하여 반환되는 포인터를 통한 멤버 변수의 조작이 불가능하게 한다.

3) 상수화 되지 않은 멤버 함수의 호출 금지
-> 호출하고자 하는 멤버함수는 반드시 상수화 한다.

(4) const 객체
- 객체 상수화의 의미
1) 객체 생성과 동시에 상수화. 멤버 변수 초기화는 가능.
2) 어떠한 경로를 통해서든 멤버변수 조작 불가
3) 상수화 된 함수만 호출 가능

const에 대하여 아시는 분은 점더 설명해 주세요!!!
728x90