Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

객체지향 프로그래밍 본문

Programming Language/JAVA

객체지향 프로그래밍

scarecrow1992 2020. 11. 1. 22:35
  • 클래스란 객체를 정의해놓은 것으로 객체를 생성하는데 사용된다.
  • 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.

 

객체와 인스턴스

  • 인스턴스화(instantiate) : 클래스로부터 객체를 만드는 과정
  • 인스턴스(instance) : 클래스로부터 만들어진 객체
  • 가령 '책상은 객체'라고 할때 '책상은 책상 클래스의 인스턴스' 라고 할 수 있다.
  • 인스턴스와 객체는 같은 의미이므로 엄격히 구분할 필요는 없지만 문맥에 따라 구분할것

  • 객체는 속성(property)과 기능(function)의 두 구성요소로 이루어 지며 각각 주로 멤버변수(memer variable)와 메서드(method)를 지칭한다.
  • TV를 예로들면 TV의 속성과 기능은 아래와 같다.
    • 속성 : 크기, 길이, 높이, 색상, 볼륨, 채널...
    • 기능 : 켜기, 끄기, 볼륨 높이기/줄이기, 채널 변경하기...
class Tv{
	//Tv의 속성(멤버변수)
	String color;
	boolean power;
	int channel;
    
	//Tv의 기능(메서드)
	void Power(){	power = !power;	}
	void ChannelUp() {	channel++;	}
	void ChannelDown(){	channel--;	}
}

 

 

인스턴스의 생성과 사용

  • 클래스의 인스턴스를 생성하는 방법은 일반적으로 아래와 같다.
클래스명   변수명;
변수명 = new 클래스명();

Tv t;
t = new Tv();
class Tv{
	//Tv의 속성(멤버변수)
	String color;
	boolean power;
	int channel;
    
	//Tv의 기능(메서드)
	void Power(){	power = !power;	}
	void ChannelUp() {	channel++;	}
	void ChannelDown(){	channel--;	}
}

class TvTest{
	public static void main(String args[]){
    	Tv t;
        t = new Tv();
        t.channel = 7;
        t.channelDown();    
    	System.out.println("현재 채널은 " + t.channel + " 입니다.");
    }
}

 

주의사항

class Tv{
	//Tv의 속성(멤버변수)
	String color;
	boolean power;
	int channel;
    
	//Tv의 기능(메서드)
	void Power(){	power = !power;	}
	void ChannelUp() {	channel++;	}
	void ChannelDown(){	channel--;	}
}

class TvTest{
	public static void main(String args[]){
    	Tv t1;
        t1 = new Tv();
        t1.channel = 7;
        t1.color = "red";
        t1.power = false;
        
        Tv t2;
        t2 = t1;
    }
}
  • 위 코드에서 객체 t1과 t2는 같은 오브젝트를 참조하게 된다.

 

 

JVM의 메모리 구조

  • 변수의 선언위치에 따라 변수의 종류는 3가지로 나뉜다.
class Variables{
	int iv;				// 인스턴스 변수
	static int cv;		// 클래스 변수
	void method(){
		int lv = 0;		// 지역 변수
	}
}
  • 각 변수의 종류에 따른 선언위치와 생성시기는 아래와 같다.
변수의 종류 선언 위치 생성 시기
클래스 변수
(class variable)
클래스 영역 클래스가 메모리에 올라갈 때
인스턴스 변수
(instance variable)
인스턴스가 생성되었을 때
지역 변수
(local variable)
클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블랙 내부)
변수 선언문이 수행되었을 때

  1. 메서드 영역(method area)
    • 프로그램 실행중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다.
    • 이때 그 클래스의 클래스변수(class variable)도 이 영역에 함께 생성된다.
  2. 힙(heap)
    • 인스턴스가 생성되는 공간.
    • 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.
    • 즉, 인스턴스변수들이 생성되ㅡㄴ 공간이다.
  3. 호출스택(call stack)
    • 메서드의 작업에 필요한 메모리 공간을 제공한다.
    • 메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수 들과 연산의 중간결과등을 저장하는데 쓰인다.
    • 메서드가 작업을 마치면 할당되었던 메모리공간은 반환되어 비워진다.

 

 

'Programming Language > JAVA' 카테고리의 다른 글

상속(inheritance)  (0) 2021.01.07
변수  (0) 2020.11.02
배열(Array)  (0) 2020.11.01
JVM의 메모리구조  (0) 2020.10.11
JDK(Java Development Kit)  (0) 2020.10.10
Comments