클래스와 객체
- 클래스와 객체
객체 마을로의 여행 test2.zip
클래스와 객체가 무엇일까요??
쉽게 말하자면 .. 붕어빵 하나 먹어본적 있나요?
클래스를 설계 할 때는 그 클래스 유형으로부터 생성되는 객체에 대해 생각해 보세요.
객체에서 아는 것 - 객체에서 자신에 대해 아는 것은 다음과 같이 부릅니다. ( 인스턴스 변수 )
객체에서 하는 것 - 객체에서 자신이 하는 것은 다음과 같이 부릅니다. (메소드)
인스턴스란 객체를 부르는 다른 이름이라고 생각하라.
객체에서 할 수 있는 일을 메소드라고 부릅니다. 객체를 설계할 때는 객체에서 알아야할 데이터도 생각해 봐야 하지만 그 외에, 데이터에 대해
어떤 일을 처리하는 메소드에 대해서 생각해 봐야합니다. 객체에는 인스턴스 변수와 메소드가 있지만 그러한 인스턴스 변수와 메소드는 클래스의 일부로 설계되어있습니다.
클래스와 객체 사이에는 어떤 차이가??
- 클래스는 객체가 아니라 객체를 만들기 위한 용도로 쓰이지요.
- 클래스에는 객체를 만들기 위한 청사진이라 볼 수 있어요. JVM은 그 유형의 객체를 만드는 방법을 알려주는 역할을 하죠.
- 클래스로 부터 만들어진 각 객체는 클래스의 인스턴스 변수용으로 쓰기위한 변수를 가질수 있어요.
- 객체를 주소록의 한 항목이라고 생각 해 보세요.
객체를 아직 사용하지 않은 주소록 카드에 비유해 보면 각 카드에는 모두 똑같은 빈 칸이 있을수 있는데요? 이 카드에 어떤 내용을 기입하면
인스턴스를 만드는 것이고, 그 카드에 집어넣은 내용은 객체의 상태를 나타낸다고 할 수 있어요.
클래스의 메소드는 특정카드에서 하는 일에 비유할 수 있는데요??
만약 주소록이라는 클래스가 있다면, AddressCard에는 getName().changeName(),setName() 같은 메소드가 있다고 생각할수 있겠죠?
따라서 모든 카드에서 같은 일을 할 수 있지만 각 카드마다 서로 다른 것을 알고 있다고 할 수 있습니다.
얼른 main에서 벗어나자
main()에만 머물러 있으면 진정 객체 마을에 있다고 할수없어요. 테스트 프로그램을 실행시키는 정도는 괜찮겠지만 진정한 객체 어플리케이션에서의
정적인 main()메소드에서 객체를 만들고 테스트하는 것과는 다르게 객체끼리 서로 다른 객체와 대화를 할 수 있게 해야 해요.
main 메소드의 두 가지 용도
- 클래스를 테스트 하기 위한 용.
-
자바 어플리케이션을 시작하기 위한 용도
자바는 청소도 알아서 합니다.
자바에서 객체가 만들어지면 힙이라는 메모리 공간에 저장됩니다.
모든 객체는 힙에서 살지요. 하지만 우리가 기존에 알고 있던 메모리 힙과는 조금 다릅니다.
가비지 컬렉션 기능이 있는 힙이지요.
객체를 만들면 자바에서는 그 객체의 크기에 따라 힙에 적당한 메모리 공간을 할당합니다.
예를 들어. 인스턴스 변수 15개가 있는 객체를 만들려면 아마도 인스턴스 변수 두 개만 있는 객체와 비교해서
공간을 더 많이 잡아 먹겠죠? 그런데 그 공간을 되찾아오려면 어떻게 해야 할까요?
어떤 객체가 더 이상 필요 없을 때 어떻게 힙에서 치워버릴 수 있을까요?
자바에서는 그런 메모리 관리를 자동으로 처리해 줍니다.
JVM에서 어떤 객체가 절대로 다시 쓰이지 않을 것이라는 결론을 내릴 수 있으면 그 객체는 가비지 컬렉션 대상이 됩니다.
그리고 메모리가 모자라게 되면 가비지 컬렉터가 작동하면서 사용할 수 없는 객체를
치워버려서 재활용 할 수 있는 메모리 공간을 확보합니다.
- 객체지향적인 프로그래밍을 하면 제작과 테스트과정이 끝난 코드를 건드리지 않고도 프로그램을 확장할 수 있습니다.
- 모든 자바 코드는 클래스 내에서 정의됩니다.
- 클래스는 해당 클래스 유형의 객체를 만드는 방법을 설명하는 역할을 합니다.
- 클래스는 청사진과 같다고 할 수 있지요.
- 객체는 각자 알아서 자기 할 일을 처리할 수 있습니다. 사용자는 객체에서 작업을 처리하는 방법에 대해서는 신경쓰지 않아도 됩니다.
- 객체에는 알고 있는 것과 할 수 있는 것이 있습니다.
- 객체가 자기 자신에 대해 알고 있는 것은 인스턴스 변수라고 부릅니다. 객체의 상태를 나타내지요.
- 객체가 할 수 있는것은 메소드라고 부릅니다. 객체의 행동을 나타내징.
- 클래스를 새로 만들 때는 그 클래스 유형의 객체를 만들어서 테스트하는 테스ㅡ용 클래스를 따로 만들어보는 것이 좋습니다.
- 클래스에서는 덜 구체적인 상위클래스로부터 인스턴스 변수와 메소드를 상속할 수 있습니다.
- 프로그램을 실행시킬 때 보면 자바 프로그램이란 결국 다른 객체와 대화를 하는 객체에 불과 합니다.