Do it! 알고리즘 입문: 자바 편 (3)
[책리뷰 & Book review]
.(점) 연산자는 클래스의 메서드나 필드에 접근하기 위해 사용되는 연산자의 이해
OtherClass.otherMethod(myObject);
이 코드에서 OtherClass는 클래스 이름, otherMethod는 그 클래스의 메서드 이름, 그리고 myObject는 otherMethod에 전달되는 인자입니다.
.(점) 연산자는 클래스의 메서드나 필드에 접근하기 위해 사용되는 연산자입니다.
OtherClass.otherMethod는 OtherClass라는 클래스의 otherMethod라는 메서드를 호출하겠다는 의미입니다.
myObject는 MyClass 타입의 인스턴스를 가리키는 참조 변수로,
이 변수가 가리키는 객체의 참조를 otherMethod에 전달하게 됩니다.
이를 통해 otherMethod에서는 myObject가 가리키는 객체에 접근할 수 있게 됩니다.
자바에서 메서드를 호출할 때, 인자로 전달되는 객체는 참조에 의해 전달됩니다. 따라서 otherMethod 메서드 내에서 obj를 통해 myObject가 가리키는 객체에 접근하고, 그 객체의 상태를 변경할 수 있습니다.
다음은 이 과정을 도식화한 그림입니다:
[스택 메모리]
| |
| obj (in otherMethod) ----|----> [힙 메모리]
| | | |
| myObject (in main)----| | MyClass 객체 |
| | | |
------------------- | |
| |
---------
위의 그림에서 myObject와 obj는 같은 객체를 가리키는 참조입니다. 이 참조는 myObject에서 obj로 전달되었으므로, otherMethod에서는 obj를 통해 MyClass 객체에 접근할 수 있습니다.
이러한 작동 방식은 아래와 같은 자바 코드로 표현할 수 있습니다:
java
class MyClass {
// MyClass 클래스의 내용
}
class OtherClass {
public static void otherMethod(MyClass obj) {
// obj를 통해 MyClass 객체에 접근할 수 있습니다.
}
}
public class Main {
public static void main(String[] args) {
MyClass myObject = new MyClass(); // 힙 메모리에 MyClass 객체 생성
OtherClass.otherMethod(myObject); // myObject 참조를 otherMethod에 전달
}
}
위의 코드에서, myObject는 MyClass 객체를 참조하고, 이 참조는 otherMethod에 전달됩니다. 이렇게 하면 otherMethod 내에서 obj를 통해 MyClass 객체에 접근할 수 있습니다.
. 과 () 호출은 무엇을 뜻하는가?
. 연산자와 () 기호는 서로 다른 역할을 합니다.
. 연산자: 이 연산자는 객체의 메서드나 필드에 접근하기 위해 사용됩니다.
클래스 이름 뒤에. 을 사용하면 해당 클래스의 정적 메서드나 필드에 접근할 수 있습니다.
객체 참조 뒤에 .을 사용하면 해당 객체의 인스턴스 메서드나 필드에 접근할 수 있습니다.
예를 들어, OtherClass.otherMethod에서 . 연산자는 OtherClass라는 클래스의 otherMethod라는 메서드에 접근하겠다는 의미입니다.
() 기호: 이 기호는 메서드를 호출하는 데 사용됩니다.
메서드 이름 뒤에 ()가 오면, 그 메서드를 호출하겠다는 의미입니다. () 안에는 메서드가 필요로 하는 인자를 전달할 수 있습니다. 예를 들어, otherMethod(myObject)에서 () 기호는 otherMethod라는 메서드를 호출하며, myObject라는 인자를 전달하겠다는 의미입니다.
따라서, .otherMethod() 형태에서. 은 메서드에 접근하겠다는 표시이고, ()는 해당 메서드를 호출하겠다는 표시입니다. 이 둘을 함께 사용하여 메서드를 호출합니다.
프로그램에서 호출과 접근은 무슨 의미인가?
메서드의 접근과 호출은 다른 개념입니다.
'접근'은 메서드나 필드를 찾아가는 과정을 의미하며,
'호출'은 메서드를 실행하는 과정을 의미합니다.
예를 들어, 다음과 같은 코드가 있을 때,
java
public class MyClass {
public static void myMethod() {
// some code
}
}
public class Main {
public static void main(String[] args) {
MyClass.myMethod(); // myMethod 호출
}
}
이 코드에서 MyClass.myMethod();는 myMethod 메서드를 호출하는 코드입니다.
여기서 MyClass.는 MyClass 클래스에 있는 myMethod 메서드에 접근하기 위한 코드이며,
myMethod()는 myMethod 메서드를 호출하는 코드입니다.
[스택 메모리]
| |
| Main.main() |
| MyClass.myMethod() |
| |
-------------------
[메서드 영역]
| |
| MyClass.myMethod |
| |
-------------------
위의 그림에서 Main.main() 메서드가 실행되면서 스택 메모리에 프레임이 생성되고,
그 안에서 MyClass.myMethod 메서드를 호출합니다.
MyClass. 는 MyClass 클래스에 있는 myMethod 메서드에 접근하고,
myMethod()는 myMethod 메서드를 호출합니다.
이때 메서드 영역에서 MyClass.myMethod 메서드의 정보를 찾아내어 실행합니다.
main 메서드에서 객체를 생성하는 것과
다른 메서드에서 객체를 생성하는 것은 크게 차이가 없습니다.
main 메서드에서 객체를 생성하는 것과
다른 메서드에서 객체를 생성하는 것은 크게 차이가 없습니다.
어디에서 객체를 생성하냐는 그 객체가 어떻게 사용되는지에 따라 결정됩니다.
예를 들어, main 메서드에서 객체를 생성하면 프로그램이 시작할 때 해당 객체가 생성되고,
main 메서드 종료 시 해당 객체는 가비지 컬렉션에 의해 회수됩니다:
java
public class Main {
public static void main(String[] args) {
MyClass myObject = new MyClass(); // 객체 생성
myObject.myMethod(); // 메서드 호출
}
}
class MyClass {
void myMethod() {
// 메서드의 내용
}
}
반면에, 다른 메서드에서 객체를 생성하면 그 메서드가 호출될 때마다 새로운 객체가 생성됩니다:
java
public class Main {
public static void main(String[] args) {
MyClass.myMethod(); // 메서드 호출
}
}
class MyClass {
static void myMethod() {
MyClass myObject = new MyClass(); // 객체 생성
// 메서드의 내용
}
}
각 경우의 도식화는 다음과 같습니다:
main에서 객체 생성:
[스택 메모리]
| |
| Main.main() |
| myObject.myMethod() |
| |
-------------------
[힙 메모리]
| |
| MyClass 객체 |
| |
-------------------
다른 메서드에서 객체 생성:
[스택 메모리]
| |
| Main.main() |
| MyClass.myMethod() |
| |
-------------------
[힙 메모리]
| |
| MyClass 객체 |
| |
-------------------
두 경우 모두 Main.main() 메서드가 호출되면서 스택 메모리에 프레임이 생성되고,
그 안에서 MyClass 객체를 생성합니다. 다만, 객체 생성 위치가 다르므로 객체의 생명 주기가 다를 수 있습니다.
자바에서 main과 메서드는 무엇인가?
자바에서 main 메서드와 다른 메서드는 각각 다른 역할을 합니다.
main 메서드: main 메서드는 자바 프로그램의 진입점(entry point)입니다.
public static void main(String [] args) 형태로 작성되며, 이 메서드가 없으면 프로그램은 실행되지 않습니다.
main 메서드 내에서는 다른 메서드들을 호출하거나 객체를 생성하는 등의 작업을 수행할 수 있습니다.
일반 메서드: 일반 메서드는 특정 작업을 수행하는 코드를 포함하고 있습니다.
메서드는 입력을 받아서 출력을 반환하는 역할을 수행하거나, 객체의 상태를 변경하는 등의 작업을 수행합니다.
메서드는 public, private, protected, static 등의 다양한 접근 제어자와 함께 사용될 수 있습니다.
다음은 main 메서드와 일반 메서드의 예시입니다:
java
public class Main {
public static void main(String[] args) {
MyClass myObject = new MyClass(); // 객체 생성
myObject.myMethod(); // 메서드 호출
}
}
class MyClass {
void myMethod() {
// 메서드의 내용
}
}
위 코드에서 Main 클래스의 main 메서드는 프로그램의 시작점입니다.
main 메서드에서 MyClass의 객체를 생성하고(new MyClass()),
그 객체의 메서드(myMethod())를 호출하고 있습니다.
이를 도식화하면 다음과 같습니다:
[스택 메모리]
| |
| Main.main() |
| myObject.myMethod() |
| |
-------------------
[힙 메모리]
| |
| MyClass 객체 |
| |
-------------------
위의 그림에서 Main.main() 메서드가 실행되면서 스택 메모리에 프레임이 생성되고,
그 안에서 myObject.myMethod 메서드를 호출합니다.
이때 힙 메모리에서 MyClass 객체를 생성하고, 그 객체의 myMethod 메서드를 호출하여 실행합니다.
#알고리즘 #자바 #자바알고리즘 #정렬알고리즘 #알고리즘강좌 #알고리즘기초 #알고리즘뽀개기 #알고리즘공부 #알고리즘대회 #백준알고리즘 #두잇알고리즘 #알고리즘조합 #해시알고리즘 #알고리즘순열 #알고리즘기본 #js알고리즘 #재귀알고리즘 #두잇알고리즘 #알고
#자바 #자바프로그래밍 #자바프로그래밍입문 #자바입문 #doit #자바언어 #자바기초 #자바인강 #자바초보 #백준자바 #두잇자바 #자바스크립트 #자바기초강의 #자바강의 #자바독학 #자바설치 #it취업 #doit #doit! #doit! #자바스크립트
#알고리즘 #쇼츠알고리즘 #알고리즘뜻 #알고리즘뜻 #알고리즘강의 #알고리즘영상 #알고리즘공부 #알고리즘대회 #쇼츠알고리즘 #알고리즘만화 #알고리즘 4화 #유튜브알고리즘 #알고리즘투게더 #알고리즘원리 #알고리즘공부 #알고리즘강의 #알고리즘이란 #실전알고리즘 #지식
#코딩테스트 #카카오코딩테스트 #네이버코딩테스트 #삼성코딩테스트 #네카라쿠배코딩테스트 #코딩테스트 #코딩테스트준비 #삼성코딩테스트 #코딩테스트문제 #코딩테스트공부 #코딩테스트준비법 #코딩테스트공부 #코딩테스트풀이 #코딩테스트언어 #코딩테스트준비 #코딩테스트
'컴퓨터공부 > 책리뷰 & book review' 카테고리의 다른 글
Do it! 알고리즘 입문: 자바 편 (5)[책리뷰 & Book review] (1) | 2024.01.30 |
---|---|
Do it! 알고리즘 입문: 자바 편 (4)[책리뷰 & Book review] (1) | 2024.01.30 |
Do it! 알고리즘 입문: 자바 편 (2)[책리뷰 & Book review] (0) | 2024.01.29 |
Do it! 알고리즘 입문: 자바 편 (1)[책리뷰 & Book review] (1) | 2024.01.29 |
댓글