Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
관리 메뉴

Super Coding Addict

Ch05. 클래스와 객체(1) 본문

JAVA 문법

Ch05. 클래스와 객체(1)

밍응애 2021. 1. 18. 23:04

< 객체지향 프로그래밍과 클래스 >

* 객체

- 객체 지향 프로그래밍의 대상이자 '생성된 인스턴스'

- 객체지향프로그래밍(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