-
day17- JAVA (자바 ,객체지향언어, 변수, 클래스변수, 인스턴스변수, 메서드, 매개 변수)KIC/JAVA 2021. 7. 15. 17:05반응형
[객체지향언어]
-> 코드의 재사용성이 높다.
-> 코드의 관리 용이
-> 신뢰성이 높은 프로그래밍 가능
-> 유지보수가 용이 -> 비용이 줄어들게 된다.
[객체의 구성 요소]
-> 속성과 기능으로 구성되어 있다.
-> 속성은 맴버 변수로 기능은 메서드로 표현 된다.
-> 인스턴스는 같은 클래스로 선언된 참조변수를 통해 다룰 수 있다.
-> 메서드의 내용은 모든 인스턴스에 대해 동일하다. (동일한 틀)
-> 참조 변수에는 하나의 값만이 저장될 수 있다. 둘 이상의 참조변수가 하나의 인스턴스를 가리키는 것은 가능하지만 하나의 참조변수로 여러 개의 인스턴스를 가리키는 것은 불가능
클래스 - 데이터와 함수의 결합
1) 변수 - 하나의 데이터를 저장할 수 있는 공간
2) 배열 - 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
3) 구조체 - 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
4) 클래스 - 데이터와 함수의 결합(구조체 + 함수)-> 자바에서는 String이라는 클래스로 문자열을 다룬다.
-> 문자열을 단순히 문자의 배열로 정의하지 않고 클래스로 정의한 이유는 문자열과 문자열을 다루는데 필요한 함수들을 함께 묶기 위해서이다.[변수]
인스턴스변수(instance variable)
- 클래스 영역에 선언되며, 클래스의 인스턴스를 생성 할 때 만들어진다. 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다.클래스변수(class variable)
- 클래스 변수를 선언하는 방법은 인스턴스변수 앞에 static을 덧 붙이기만 하면 된다.
- 클래스변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 된다.
- 그래서 클래스 변수를 공유 변수(shared variable)라고도 한다. 클래스 변수는 인스턴스를 생성하지 않고도 언제라도 바로 사용 할 수 있으며, '클래스이름.클래스변수'와 같은 형식으로 사용한다.
지역변수(local variable)
- 메서드 내에 선언되어 메서드 내에서만 사용 가능하며, 메서드가 종료되면 소멸되어 사용할 수 없게 된다.- for문 또는 while문의 블럭 내에 선언된 지역변수는, 지역변수가 선언된 블럭{} 내에서만 사용 가능하며, 블럭{}을 벗어나면 소멸되어 사용할 수 없게 된다.
[클래스변수와 인스턴스변수]
인스턴스 변수: 인스턴스가 생성될 때 마다 생성 될 때마다 생성되므로 각기 다른 값을 유지할 수 있다.
클래스 변수: 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 갖는다.
[호출]
클래스 변수(static) : 클래스명.변수명,인스턴스 변수명 -> 변수 하나의 공간을 공유하기 때문에 이렇게 가능인스턴스 변수 : 인스턴스 변수명
[선언 위치에 따른 변수의 종류]
클래스(static) 변수 :클래스 영역에 선언.
static 예약어로 선언함
글래스 정보가 메모리에 로드될때 변수메모리 할당.
객체화(new 연산자로 주소생성 )와 관련없는 변수임.
메모리할당 위치 : 클래스 영역.
클래스의 모든 객체의 공동 변수로 사용됨.
사용 : 클래스명 . 변수명,
인스턴스변수 :클래스 영역에 선언됨
자료저장형 변수명; 선인됨.
객체회시 메모리 할당받음.
반드시 객체화 되어야 변수를 사용할 수 있음
메모리 할당 위치 : 입영역
사용 : 참조변수명, 변수명
지역변수:메서드 내부에서 선언됨.
(매개변수포함) 초기화되어야함.
변수선언이 실행될때 메모리 할당.
메모리할당 : 스택영역
사용 : 변수명[메서드]
- 메서드는 어떤 작업을 수행하기 위한 명령문의 집합 이다.
- 하나의 메서드는 한 가지 기능만 수행하도록 작성 하는 것이 좋다.
- 반복적으로 수행되어야 하는 여러 문장을 하나의 메서드로 정의해 놓으면 좋다.
- 관련된 여러 문장을 하나의 메서드로 만들어 놓는 것이 좋다.
- 메서드는 크게 선언부와 구현부(몸통, body), 두 부 분으로 나누어져 있다.- return -> return이 실행되면 메서드가 종료됨. 리턴 타입이 void가 아닌 경우는 반드시 return 값을 구현해야 한다. void인 경우 return 생략 가능함.
public -> 접근 제어자
void -> 리턴 타입
main -> 메소드 명
String[] args -> 매개변수 목록
static -> 여기서 스태틱은 객체화 시키지 않고 바로 메모리로 저장시켜 바로 실행 시킬수 있도록 한다는 뜻
(메인 메소드가 실행 되려면 해당 되는 파일과 이름이 같아야 하고 해당 되는 클래스가 public이여야 한다)
(하나의 파일에는 public 클래스가 하나만 있어야 한다. (main 메소드))
[메서드]
- 메서드의 괄호()에 선언된 매개변수는 지역변수로 간주 되어 메서드 내에서만 사용될 수 있다
- 매개변수는 메서드가 종료되는 순간 메모리에서 제거 되어 더 이상 사용할 수 없게 된다.
- 리턴타입은 메서드의 수행결과를 어떤 타입(자료형)으로 반환할 것인지를 알려 주는 것이다.
- 메서드가 결과값을 반환하지 않는 경우에는 리턴타입 대신 void를 사용한다.
- 메서드가 결과값을 반환하는 경우에는 메서드 내에 반드시 return 문을 사용해서 리턴타입에 맞는 결과값을 호출한 메서드에게 반환하도록 해야 한다.
- 메서드의 결과를 저장하기 위해서는 메서드에 선언된 리턴타입과 같은 타입의 변수를 준비해야한다.[JVM 의 메모리 구조]
- 용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
메소드영역 (Method Area)
- 프로그램 실행 중 어떤 클래스가, 사용되면 해당 클래스의 클래스파일(*.class) 를 읽어서 분석하여, 클래스에 대한 정보(클래스 데이터)를 Method Area에 저장한다. 이 때, 그 클래스의 클래스 변수(Class" variable)도 이 영역에 함께 생성된다.힙(Heap)
- 인스턴스변수(instance variable)들이 생성되는 공간 이다.
- 인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에서 생성.호출스택
- 호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다.
- 메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당된다.
- 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개 변수 포함)들 과 연산의 중간결과 등을 저장하는데 사용.
- 메서드가 작업을 마치게 되면, 할당되었던 메모리공간은 반환되어 비워진다.- 호출스택의 제일 상위에 위치하는 메서드가 현재 실행중인 메서트이며, 나머지는 대기상태에 있게 된다.
- 호출스택을 조사해 보면 메서드 간의 호출 관계와 현재 수행중인 메서드가 어느 것인지 알 수 있다.[기본형 매게변수와 참조형 매개 변수]
- 자바에서는 메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개 변수에 복사해서 넘겨준다.
- 매개변수의 타입이 기본형 (Primitive type)일 때는 기본형 값이 복사되 겠지만, 참조형 (Reference type)이면 인스턴스의 주소가 복사된다.
- 메서드의 매개변수를 기본형으로 선언하면 단순히 저장된 값만 얻지만, 참조형으로 선언하면 값이 저장된 곳의 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것 도 가능.
기본형 매개변수 - 변수의 값을 읽기만 할 수 있다. (read only)
참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다. (read & write)300x250'KIC > JAVA' 카테고리의 다른 글
day18_2- JAVA (자바 , 변수의 초기화, toString) (0) 2021.07.15 day18_1- JAVA (자바 ,static 메서드, 인스턴스메서드, 메서드 오버로딩, 생성자, this) (0) 2021.07.15 day16 - JAVA (자바 예제) (0) 2021.07.14 day15 - JAVA (배열, 다차원 배열, 향상된 for문, 가변 배열) (0) 2021.07.14 day14 - JAVA (반복문, break, continue, if문, SWITCH 문) (0) 2021.07.14