일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- String
- Hash
- 그래프
- Dijkstra
- MYSQL
- Brute Force
- SQL
- DP
- 다익스트라
- Stored Procedure
- binary search
- union find
- 이진탐색
- two pointer
- Two Points
- Trie
- 스토어드 프로시저
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