본문 바로가기

준비중

자바 복습하기 (객체지향, 클래스, 인스턴스, 오버로딩, 생성자편)

반응형

* 해당 게시물은 자바의 정석(책)을 참고하여 작성하였습니다.

 

객체지향언어

 

자바는 대표적인 객체지향언어이다.

객체지향언어에는 3가지의 주요 특징이 있다.

 

1. 코드의 재사용성이 높다.

- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

 

2. 코드의 관리가 용이하다.

- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

 

3. 신뢰성이 높은 프로그래밍을 가능하게 한다.

- 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며 ,코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지할 수 있다.

 

class와 object(객체)

class - class란 object를 정의해 놓은 것으로 object를 생성하는데 사용된다.

object - object란 class에 정의된 내용대로 memory에 생성된 것을 말한다.

 

object는 property와 function로 구성되어 있다.

property - variable

function - method

 

* class는 설계도이고 object는 설계도를 보고 만든 제품이라고 생각하면 편하다.

 

instance

class로부터 object를 만드는 과정을 class의 instantiate라고 하며 해당 object를 instance라고 한다.

* instance와 object는 거의 비슷한 의미니깐 딱히 구분해서 사용은 안해도 된다.

 

instance의 생성과 사용방법을 알아보겠다.

Member admin; //Member class의 참조변수 admin을 생성
admin = new Member(); //Member insatance를 생성하고, 생성된 Member instance의 주소를 admin에 저장함

c언어의 구조체 같은 느낌? 이라고 생각하면 편할 것 같다.

 

* instance(Member)는 참조변수(admin)을 통해서만 다룰 수 있고, 참조변수와 instance의 type은 일치해야 한다.

 

변수

변수에는 3가지 종류가 있다.

1. instance variable

class 영역에 선언되며, class의 instance를 생성할 때 만들어진다. 

 

2. class variable

instance variable 앞에 static을 붙이면 class variable이 된다.

 

3. local variable

평소에 많이 사용하는 변수로 내용은 생략한다.

 

* instance variable은 독립적인 저장공간을 갖고 있지만 class variable은 모든 instance가 공통된 저장공간을 갖고 있다.

  따라서 class variable은 object의 고정된(static) 값을 표현하고 instance variable은 object마다 각각 다른 값을 저장할 때 사용한다.

 

method

method에서 parameter은 여러개의 variable이 사용 가능하다.

허나 method에서의 return값은 최대 하나만 허용한다.

또한 void type의 경우 return은 compiler가 자동으로 추가하기 때문에 생략이 가능하다.

 

JVM의 메모리 구조

1. method가 호출되면 수행에 필요한 만큼의 memory를 stack에 할당받는다.

2. method가 수행을 마치면 사용한 memory를 반환하고 stack에서 삭제한다.

3. 호출stack의 가장 위에 존재하는 method가 현재 실행 중인 method이다.

4. 아래에 있는 method가 바로 위의 method를 호출한 method이다.

 

* 자료구조를 공부했다면 매우 쉽게 이해가 가능할 것이다.

 

class method와 instance method

 

instance method

- instance variable과 관련된 작업을 하며 instance variable을 필요로 하는 method이다.

 

class method

- instance method의 반대를 일반적으로 칭한다.

 

규칙

1. class를 설계할 때, member variable 중 모든 instance에 공통으로 사용되는 것에 static을 붙인다.

* member variable은 instance variable과 static variable 모두를 통칭한다.

 

2. class variable(static variable)은 instance를 생성하지 않아도 사용할 수 있다.

 

3. class method(static method)는 instance method를 사용할 수 없다.

 

4. method 내에서 instance variable을 사용하지 않는다면, static을 붙이는 것을 고려한다.

 

* 각 member간의 호출관계에 대하여

instance member -> class member  = 가능

class member -> instance member = 불가능 *(허나, object를 생성하여 이용하면 가능)

 

오버로딩(overloading)

한 class 내에 같은 이름의 method를 여러 개 정의하는 것을 overloadding이라고 한다.

 

overloading의 성립 조건으로는

method이름이 같아야 하며, 매개변수의 개수 또는 타입이 달라야 한다.

 

overloading이 없다면 같은 기능을 하는 method들이지만 서로 다른 이름을 가져야 한다.

허나, overloading을 통해 여러 method들이 하나의 이름으로 정의될 수 있다.

 

생성자

생성자란 instance가 생성될 때 호출되는 instance 초기화 method로 instance variable 초기화 작업과 instance 생성 시에 실행되여야 할 작업을 위해 사용된다.

 

생성자의 조건으로는

생성자의 이름은 class의 이름과 같아야 하며 생성자는 return값을 가지지 않는다.

 

* 연산자 new가 instance를 생성하는 것이지 생성자가 instance를 생성하는 것이 아니다.

 

Member m = new Member()

해당 코드를 예시로 설명해보겠다. *Member class라고 가정하겠다.

1. 연산자 new로 Member class의 instance가 생성된다.

2. 생성자 Member()가 호출되어 사용된다.

3. 연산자 new의 결과로, 생성된 Member instance의 주소가 반환되어 참조변수 m에 저장된다.

 

*솔직히 야매로 이야기하자면 

object == instance, Member() = object , instance , 생성자

Member == class,  

m == Member instance의 주소값을 갖고 있는 variable

 

이렇게만 이해해도 코드작성에 큰 문제는 없다.

 

모든 class에는 반드시 하나 이상의 생성자가 정의되어 있어야 하지만 compiler가 default constructor을 제공하기 때문에

특별히 instance 초기화 작업이 요구되어지지 않는다면 생성자를 정의하지 않고 complier가 제공하는 기본 생성자를 사용해도 된다.

 

 

 

 

반응형