객체지향 프로그래밍에서 중요한 메소드에 대해서 알아보려고 합니다.
메소드란 코드를 재사용할 수 있도록 합니다.
위 그림은 methodClass 클래스 안에 main이라는 method를 정의하고 있습니다.
위 그림은 0부터 num 인자값까지 출력하는 printNum 메소드를 정의하고
main 메소드에서 printNum 메소드에 인자 값을 넣어 호출하는 코드입니다.
여기서 의문이 드실텐데 "main 메소드를 호출하는 것은 어디인가?"라고 생각합니다.
main 메소드를 호출이 되어야지 정상적으로 프로그램이 작동될 것인데
이것은 사실 main 메소드는 자바가 실행하는 것입니다.
즉, printNum 메소드는 우리가 작성한 main 메소드가 실행하는 것이며 main 메소드는 자바가 실행합니다.
위 캡처의 메소드에서 보았던 static 키워드에 대해서 알아봅시다.
static은 정적이라는 뜻이며 static이라는 키워드를 사용하여 변수, 메소드를 만들 수 있습니다.
정적 변수와 정적 메소드를 정적멤버라고 부를 수 있습니다.
아래 그림은 static 메소드와 변수의 예시입니다.
정적 멤버들은 객체(인스턴스)에 소속되어 있지 않고 클래스에 소속되어 있습니다.이러한 특성 때문에 클래스 로더가 클래스를 로딩해서 메모리에 적재할 때, 메모리 메소드 영역에 클래스별로 관리합니다.정적 멤버들은 메모리의 Data 영역에 할당되며, 프로그램이 종료될 때 해제가 되고,
Data 영역에 할당된 정적멤버들은 모든 객체들이 공유하여 참조가 가능합니다.
다만, Garbage Collector의 영향 밖에 있기 때문에, static을 많이 사용하게 되면 성능 저하로 이어질 수 있기 때문에
무분별한 static 키워드 사용은 자제해야합니다.
해당 그림은 Data 영역에 할당된 정적 멤버가 모든 객체에 공유되어 참조되는 코드입니다.
클래스 필드의 num1은 모든 객체들에게 공유된 반면, 인스턴스 필드의 num2는 공유가 되지 않아 카운트되지 않았습니다.
'Java' 카테고리의 다른 글
[Java] 상속과 생성자 (0) | 2023.10.15 |
---|