Java는  class단위로 코드를 구성한다.


class의 기본적인 구조는 크게 3가지로 구분할 수 있다.




#field


[기본형태 : 접근지정자 데이터타입(dataType) 변수명]


필드라고 불리기도 하고, 변수라고 불리기도 하는 이것은, 


한 class내에서 모든 메소드(method)이 접근가능한 변수를 의미한다.




이러한 필드는 인스턴스(instance) 필드와 스테틱(static)필드 두가지로 구분되는데,


인스턴스 필드(instance field)는 말 그대로 객체, 즉 클래스(class)를 생성했을 시에 같이 생성되는 필드이다.


스테틱 필드(static field)은 객체가 생성되기 이전에 객체보다 먼저 생성되는 필드로서, 


객체의 생성유무와 연관성이 없기 때문에, 어떤 클래스에서도 공통적으로 사용할 수 있다.






#method


[기본형태 : 접근지정자 리턴타입(return type) 함수명(메소드명) (매개변수)]


메소드(method)는 기능을 가진 함수라고 할 수 있다.




개발자가 클래스외부에서 클래스를 이용할 경우, 


정보보호와 은닉을 위해 클래스의 직접적인 필드을 건드리지 못한다.


그러나 메소드를 이용하면 메소드(함수)는 클래스 내부에 위치해 있기 때문에, 


같은 클래스 내부의 필드를 이용하거나, 값에 대한 수정이 가능하다.


클래스의 외부와 클래스 내부의 필드를 연결해주는 다리의 역활을 한다고 말할 수 있다.




메소드(method)도 필드와 마찬가지로, 


인스턴스 메소드(instance method)와 스테틱 메소드(static method)로 구분할 수 있다.


설명은 필드와 동일하다.


여기서 하나, 인스턴스 메소드와 스테틱 메소드의 차이를 말하자면,


인스턴스메소드는 this가 이용가능하나, 스테틱메소드는 this가 이용불가능하다.


this에 대한 설명은 블로그내의 'this와 super의 이용'에서 자세히 설명하고 있다.






#constructor


생성자는 말 그대로 생성을 하는 역활을 하는데, 정확하게 이야기를 하자면,


객체를 등록하는 역활을 한다고 할 수 있다.


객체를 만들기 위해서 우리는 main에서 아래와 같은 코딩을 하는데,



여기서 new뒤에 오는 No4() 이부분이 생성자를 호출하는 부분이다.


위와 같은 코드를 실행하면 main은 No4의 생성자로 이동하여,


생성자는 객체를 등록하게 되고, main은 이 객체를 인식하여 이용할 수 있게 된다. 




생성자는 주로 개발자가 클래스(class)내의 필드(field)를 초기화해줄 때 이용된다.


생성자의 생김새는 아래와 같다.




생성자의 가장 큰 특징중 하나는 리턴타입(return type)이 없다는 것과 시작글자가 대문자라는 것이다.


객체를 등록하는 역활을 하기 때문에, 반환값이 필요하지않으며,


생성자의 이름은 클래스의 이름과 동일해야 하기 때문에,


클래스의 시작글자가 대문자인 것처럼, 생성자의 시작글자 또한 대문자이다.




그런데, 우리가 객체를 만들 때 따로 생성자를 만들지 않고 객체를 등록하여 이용한다.


이렇게 할 수 있는 이유는 바로 객체 내에는 생성자가 이미 존재하기 때문이다.


눈에 보이지 않지만, 객체등록을 위해 생성되있는 생성자를 "default constructor"라고 한다.


이 디폴드 생성자(default constructor)는 개발자가 생성자를 하나도 명시하지 않았을 경우에 존재한다.


만약 개발자가 하나라도 명시할 경우에는, default constructor는 존재하지 않기 때문에,


개발자가 따로 명시를 해줘야 한다.




생성자는 또한 오버로딩(overloading)이 가능한다.


 + [오버로딩(overloading)]


   : 오버로딩이란, 개발자가 동일한 기능을 하는 메소드들을 만들때, 


    같은 메소드(method)명을 가지고, 각각 다른 매개변수를 지정하고 싶을 때 사용하는 기법이다.


    JAVA는 함수명(메소드명)이 동일해도 매개변수의 타입과, 매개변수의 갯수가 다르다면,


    상황에 맞추어 알맞은 메소드들을 찾아간다.


 < 오버로딩(overloading) 사용예시>







'JAVA' 카테고리의 다른 글

IntelliJ 설치  (0) 2018.10.26
final  (0) 2018.01.19
cmd로 클래스 실행  (0) 2018.01.19
접근 지정자  (0) 2018.01.19
class간의 관계  (0) 2018.01.18

+ Recent posts