만약 void def_x() 라는 함수가 있으면 이 함수를 호출 할 때 c에서는 def_x(); 이렇게 코딩해주면 되지만
자바에서는 객체를 생성한뒤, 객체이름.def_x(); 이런식으로 호출해야 하잖아요? 이 두개의 차이가 뭔가요? 왜 객체지향에서는 굳이 C처럼 해도 될 명렁을 객체라는 것을 붙혀서 하나요?
그리고 객체지향을 이루는 성분들을 제대로 이해한게 맞는거지 봐주세요.
클래스 -건물
메소드 - 건물들의 방
객체 - 방에 달려있는 전화기(호출을 담당)
비유하자면 이렇게 이해하고 있는데 잘 하고 있는거지 좀 봐주세요 ㅠㅠ
비유가 완전히 틀렸음. 책 다시 읽어볼것..
클래스는 실재하는 대상이라기 보단 그 대상을 찍어내는 틀. 예를 들면 클래스 = 전화기를 찍어내는 틀, 객체 = 전화기, 메소드 = 전화기의 버튼, 멤버 변수 = 전화기의 내부 상태
Class Telephone 하나로 객체 telephone1, telephone2, telephone3을 만들 수 있고, 각각의 객체는 서로 다른 멤버 변수 (내부 상태)를 가지지만 멤버 함수는 대체로 (절대적인건 아님) 공유함. 이때 Class Telephone을 telephone1로 만드는 작업을 인스턴스화한다고 함
예를 들면 Telephone telephone1, telephone2, telephone3; telephone1.dial(집); telephone2.dial(학교); telephone3.dial(친구); 이렇게 사용할 수 있고 telephone1~3은 각각 다른 내부 상태(멤버 변수)를 가지겠지
객체이름.def_x()로 하는 이유는 그냥 패러다임이 그런 거니까. 기존의 함수에 데이터 구조체를 집어넣는 방식으로도 뭐든지 다 할 수 있지만, 모든 대상을 객체로 보고 다루면 좀 더 프로그램의 구조가 명확하게 드러나니까 이해하기 쉽고, 오류 발생시 지역적 수정이 될 가능성이 높고, 협업에 적절하고, 재사용성이 높고, 등등..
문법레벨에서는 둘의 차이점이 명확하게 드러나지 않음. 별 차이가 없음.