JAVA Programming/JAVA 개념 정리

JAVA instance static 메서드 오버 로딩

psy_er 2021. 9. 22. 01:15
728x90

JAVA instance static 메서드 오버 로딩

 

객체 지향 프로그래밍

 

현실에 존재하는 사물과 대상의 상태, 그리고 그에 따른 행동을 실체화시키는 형태의 프로그래밍이다. 객체 = 데이터 + 알고리즘이다. 하나의 프로그램을 상호 연결된 객체들의 집합으로 본다. 단순 절차보다 객체를 중시한다. 문제와 관련된 객체를 만들고 이 객체들 간의 메시지 교환으로 문제를 해결한다. 객체란 현실세계의 사물 또는 대상을 모방한 프로그램상의 object를 가리킨다. 일처리를 위해 객체가 갖는 데이터로 묘사된다. 객체가 제공하는 기능을 통해 외부세계와 상호작용한다. 추상적으로 표현되어 중요한 특징만을 뽑아낸다. 속성은 객체의 특성을 표현한다. 현재 객체의 상태 정보를 표현하는 정적인 성질이다. 행위는 객체 내부에서 처리할 일이나, 객체들 간에 영향을 주고받는 일이다. 동적인 일을 처리하는 단위이다.

 

클래스

 

클래스로부터 생성될 객체들의 공통된 속성과 행위를 추상적으로 표현하여 정의한다. 대상의 공통적 특징에 대한 서술이다. 클래스 정의는 단지 틀일 뿐이다. 클래스 정의는 크게 두 부분으로 나뉜다. 멤버 필드의 정의와 메서드의 정의로 나뉜다. 멤버 필드의 정의에서는 변수 혹은 상수 선언문을 쓴다. 필요시 선언과 동시에 값을 초기화할 수 있다. 초기값을 지정하지 않으면 0으로 설정할 수 있다. 메서드의 body를 구현한다. 클래스는 객체를 만들기 위한 틀이다. 객체가 지니는 속성과 행위를 추상적으로 정의한다. 객체는 해당 클래스의 구체적인 한 실례이다. 같은 클래스로 만들어진 각 객체는 속성에 고유한 값을 지닐 수 있고 동일한 행동을 할 수 있다.

 

JAVA에서는 클래스 정의가 C++의 클래스 정의와 달리 세미콜론으로 끝나지 않고, 함수 구현을 모두 기술한다. 가장 기본적인 instance 멤버 필드는 각 객체 생성 시 별도의 메모리를 할당하고 멤버 변수의 경우 각 객체 마도 고유의 속성 값 저장이 가능하다. static 멤버 필드는 프로그램 시작 시 메모리 할당이 일어난다.

 

메서드

 

메서드는 객체가 수행할 수 있는 동작을 정의한다. 보통 멤버 필드를 이용하는 연산이다. 객체가 단순 변수와 다른 대표적인 특징을 가진다. 함수가 클래스 안에 있는 것으로 이해하면 쉽다. 멤버 필드를 조작하는 안전한 방법은 gettersetter 함수를 이용하는 것이다. 클래스 정의 안에서 메서드의 구현부를 모두 기술한다. 메서드를 작성할 때는 클래스 정의 안에 객체의 행위에 대한 메서드의 body를 구현함으로써 기술된다. 실제 수행하는 문장들의 집합이고 인수들은 순서대로 각각의 매개변수로 받는다. 반환 값이 없는 경우 반환형에는 void를 사용한다. 메서드를 호출할 때는 객체에게 지정된 행위의 수행을 요청한다. 메서드에 포함된 문장을 수행시키는 동작을 요청한다. 메서드 호출도 하나의 표현식이기에 표현식이 나타날 수 있는 모든 곳에 사용이 가능하다. 메서드 호출 시 메서드 호출 측은 메서드에게 하나 이상의 인수를 넘겨줄 수 있다. 메서드 호출 측은 메서드 호출의 결과로 하나의 값을 반환받을 수 있다.

 

 

동적 메모리 할당

 

자바의 객체는 항상 동적 메모리 할당을 받는다. 프로그래머가 원하는 순간에, 원하는 크기의 메모리를 할당받는 방법은 new연산자를 사용하면 된다. 동적 할당될 필요 크기를 자동적으로 계산하고 동적 할당된 영역의 참조값을 결괏값으로 가진다. 참조 자료형 변수에 실제 값에 대한 저장 공간을 할당받기 위해 필요하다. 가비지 컬렉션은 보통 더 이상 참조되지 않는 동적 할당 메모리는 JVM의 가비지 컬렉터에 의해 자동으로 회수된다.

 

728x90

메서드 호출 메커니즘

 

1. 각 인수의 표현식은 메서드가 호출되기 전에 먼저 계산된다.

2. 계산된 각 인수값은 해당되는 형식 매개변수에 위치 순서대로 복사된다.

3. 메서드 본체의 문장은 return 문이 나올 때까지 수행한다.

4. return문의 표현식이 계산된다.

5. 메서드 호출 측은 메서드 호출 문 자리에 return문으로 넘겨받은 결괏값을 대치하고 수행을 계속한다.

 

값 호출은 기본 자료형을 메서드로 호출할 때 이루어진다. 실 인수의 값이 형식 매개변수로 복사되어 전달된다. 참조 호출은 메서드 호출에서 참조 자료형을 실 인수로 사용할 때 이루어진다. 객체의 값 대신 참조 변수가 가진 객체에 대한 참조값을 매개변수로 복사하여 전달하면 매개변수를 통해 실 인수를 공유하는 효과를 가진다.

 

 

메서드 오버 로딩

 

메서드 오버 로딩은 하나의 클래스 내에서 같은 이름을 가진 메서드가 여러 개 정의될 수 있다는 것을 의미한다. 비슷한 동작을 하는 다양한 메서드들을 일관되게 조작하는 것이 가능하다. 호출 문에 나타난 인수의 개수와 타입을 통해 실행될 body를 구분한다.

 

 

This 참조 변수

 

this 참조 변수는 메서드 호출 시, 메서드 자신을 호출한 객체에 대한 참조값을 받는 변수이다. 메서드 안에서 자동 정의되는 지역변수이다. 메서드 안에서 자신의 다른 멤버들을 조작하고자 할 때 사용된다. 내부적으로 전달되는 참조값은 멤버 접근 시 컴파일러에 의해 기입된다. 명시적으로 사용해도 무방하고, 보통 데이터 멤버와 매개 변수 구분 위해 사용된다.

 

 

instance / static

 

멤버 필드는 객체의 특징과 속성을 저장한다. instance 멤버 필드는 각 객체 생성 시 별도의 메모리를 할당하고 멤버 변수의 경우 각 객체마다 고유의 속성 값을 저장할 수 있다. static 멤버 필드는 프로그램 시작 시 메모리가 할당되고 생성된 객체의 수와 상관없이 단 하나만 생성이 된다. 이 클래스의 모든 객체들이 공유되고 객체를 생성하지 않고도 사용이 가능하다. 전역 변수와 비슷한 점이 있다.

 

instance 메서드는 객체가 수행하는 일반적인 행위이고 자신의 모든 멤버를 직접 참조 가능하다. static 메서드는 객체를 생성하지 않고도 정의된 행위를 수행할 수 있다. static 멤버 필드의 안전한 접근 제공을 위해 객체 생성과 관련 없는 일반적 기능의 간편한 사용 제공을 위해 사용된다. static이 아닌 멤버 즉 instance 멤버는 직접 참조가 불가능하다. 또한 this 참조 변수 사용이 불가능하다.

 

모든 응용 프로그램은 main() 메서드를 가지는 객체가 중심이 되어 JVM에 의해 먼저 처리된다. public은 어디서는 접근을 허용한다는 뜻이고 객체가 실행될 때 JVM에 의해 호출될 수 있도록 한다. static은 객체를 생성하지 않고도 접근을 용이하게 하기 위해서 사용한다. void는 반환 값이 없는 메서드를 사용할 때 쓰는 것이다. String []은 String의 배열형으로 JVM을 통해 main() 메서드로 인자를 전달받을 수 있다.

 

 

 

 

728x90

'JAVA Programming > JAVA 개념 정리' 카테고리의 다른 글

JAVA 클래스 상속  (1) 2021.11.10
JAVA 캡슐화 정보은닉  (12) 2021.09.26
JAVA와 c++의 차이점  (7) 2021.09.24
JAVA의 조상 C++  (4) 2021.09.23
JAVA 응용 프로그램의 기본 구조  (3) 2021.09.21