Super Coding Addict
Ch05. 클래스와 객체(1) 본문
< 객체지향 프로그래밍과 클래스 >
* 객체
- 객체 지향 프로그래밍의 대상이자 '생성된 인스턴스'
- 객체지향프로그래밍(OOP)
cf. 절차지향프로그래밍(Procedural Prograaming)
: 시간이나 사건의 흐름에 따른 구현 ex) C언어
* 클래스
- 객체를 프로그래밍하기 위해 코드화한 것
- 객체지향프로그램의 가장 기본요소이자 객체의 청사진
* 멤버변수, 메서드 ( 클래스
- 멤버변수(property, attribute) : 객체가 가지는 속성을 변수로 표현
- 메서드 : 객체의 기능을 구현
* public 클래스
- 자바파일 하나에 여러 개 클래스 존재 가능
- 그러나 public 클래스는 하.나.!!! public 클래스와 파일이름은 동일해야 한다
< 함수와 메서드 >
* 함수
- '하나의 기능'을 수행하는 일련의 코드
- 함수를 호출하여 사용하고 기능이 수행된 후에 값을 반환할 수 있다
- 여러곳에서 호출가능 (코드재사용 장점!)
- 기능이 분리되어 있어 가독성 좋음
- 유지보수 유용
- 매개변수 O or X, 반환값 O or X
* 함수 정의하기
int add(int num1, int num2){
int result;
reuslt = num1 + num2;
return result;
}
* 메서드
- 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
- 메서드 이름은 사용하는 쪽(클라이언트 코드)에 맞게 명명하는 것이 좋다
- Camel (소문자로 시작해서 중간중간 대문자로)
cf. 클래스 : 대문자로 시작하는 게 좋음, 패키지 : 소문자
* 메모리
- Stack : 짐이 쌓여있는 것과 같은 메모리구조
ex) 함수에서 사용하는 메모리
: 지역변수는 함수가 호출이 되었을 때 생성이 되어서, 함수 호출이 끝나면 사라지는 변수
: 함수의 호출이 끝나면 자동으로 반환됨
--> 가령 main메서드에서 어떤 메서드를 호출하면, main메서드와 그 안에 있는 지역변수들이 메모리에 자리를 잡고
호출한 다른 메서드와 그 지역변수들이 그 위의 메모리에 자리를 잡아 마치 층층이 쌓이는 듯한 모습을 함.
이 때 메서드 호출이 끝나면 그 메서드와 지역변수들은 메모리에서 지워지고 main메서드만 다시 남게 됨
< 인스턴스, 힙 메모리 >
* 인스턴스
- 클래스로부터 생성된 객체 (클래스가 메모리에 생성된 상태)
- 클래스 코드가 있고 -> 객체는 여러개가 생성될 수 있음 -> 이 객체들을 인스턴스라 부른다
- 인스턴스들은 각각의 멤버 값들을 갖게 되며, 그 값들은 Heap이라는 메모리에 생성됨
* 멤버변수
- 객체 생성시 new를 했을 때 Heap이라는 메모리에 생긴다
ex) Student 클래스에서 studentID, studentName, address라는 멤버변수를 선언
StudentTest 클래스의 main메서드에서 student타입의 studentLee라는 참조변수를 선언하여 객체를 생성하면(참조변수 : 메모리에 생성된 인스턴스를 가리키는 변수)
Heap영역에 멤버변수들이 자리를 잡고 Stack에 있는 studentLee가 Heap에 있는 이 멤버변수들을 가리킨다
(cf. 메서드는 Heap 영역에 있지 X)
- 이 멤버변수는 가비지 컬렉터가 메모리를 수거할 때 소멸된다
--> 이렇게 Heap 영역에 있는 애들을 인스턴스라고 부르며, 각각의 인스턴스들은 별개의 메모리를 가진다
System.out.println(studentLee);
System.out.println(studentKim);
참조변수들을 출력해보면, 이러한 결과들이 나타난다
classpart.Student@6a5fc7f7
classpart.Student@3b6eb2ec
--> 여기서 @앞은 class의 풀네임(classpart 패키지 안에 있는 Student클래스)이며, @뒤는 주소값
--> 그러나 주소값은 실제 피지컬 메모리의 값이 아니라, JVM이 준 해시코드 값 (16진수를 준다 4X8 = 32비트)으로
참조변수가 가리키고 있는 address임
www.fastcampus.co.kr/dev_online_jvweb
'JAVA 문법' 카테고리의 다른 글
Ch07. 상속과 다형성 (1) (0) | 2021.01.22 |
---|---|
Ch06. 배열(2) (0) | 2021.01.20 |
Ch06. 배열(1) (0) | 2021.01.19 |
Ch05. 클래스와 객체(3) (0) | 2021.01.19 |
Ch05. 클래스와 객체(2) (0) | 2021.01.19 |