| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- DP
 - SQL
 - 이진탐색
 - 스토어드 프로시저
 - MYSQL
 - two pointer
 - Hash
 - String
 - union find
 - Stored Procedure
 - Brute Force
 - Trie
 - 그래프
 - binary search
 - 다익스트라
 - Two Points
 - Dijkstra
 
													Archives
													
											
												
												- Today
 
- Total
 
codingfarm
객체지향 프로그래밍 본문
- 클래스란 객체를 정의해놓은 것으로 객체를 생성하는데 사용된다.
 - 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.
 
객체와 인스턴스
- 인스턴스화(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)  | 
클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블랙 내부)  | 
변수 선언문이 수행되었을 때 | 

- 메서드 영역(method area)
- 프로그램 실행중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다.
 - 이때 그 클래스의 클래스변수(class variable)도 이 영역에 함께 생성된다.
 
 - 힙(heap)
- 인스턴스가 생성되는 공간.
 - 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.
 - 즉, 인스턴스변수들이 생성되ㅡㄴ 공간이다.
 
 - 호출스택(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