자바 개념 노트 [6-1] : CLASS : 클래스,객체, 필드, 메소드, OOP 기초
😃 기본 개념 및 요약 😃
클래스 = 설계도 = 와플팬
객체 = 인스턴스 = 설계도로찍어낸것 = 와플
필드 = 속성 = 특징
메소드 = 동작 = 함수
프로그래밍책에서 OOP/객체/클래스 설명할 때 지겹도록 지겹도록 지겹도록 사용하는 비유 : 와플과 와플팬
- 클래스 like 와플팬, 객체 like 와플
■ 클래스, 객체, 필드, 메소드 기본 개념
와플팬으로 애플잼와플, 누텔라와플 등을 여러 가지 와플을 만들 듯. 클래스(설계도) 하나로 여러 객체를 만들 수 있다.
여기서 클래스로 객체를 찍어내는 것을 *인스턴스화* 한다고 한다. 그래서 객체와 인스턴스를 동일 개념으로 봐야한다.
▷객체: 물리적으로 존재하는 것 (자동차, 책, 사람), 추상적인 것(회사, 날짜 등) 중에서 자신의 속성과 동작을 가지는 모든 것
-객체의 속성 = 필드(Field).
-객체의 동작 = 메소드(Method)
▷ 필드&메소드 와플 예 :
와플팬 클래스에서 찍어낸 와플1 객체가 있다면:
와플1의 필드 : 토핑소스, 크기, 바삭한정도, 가격
와플1의 동작 : 맛이어떤지묘사해줘, N개당 가격이 얼마야?,
▷객체 특징:
- 객체들은 서로간의 기능을 이용하고 주고 받을 수 있음. 예를 들어 와플객체는 탄단지객체를 불러내 자신의 칼로리계산
- 객체들간의 관계는 집합 관계, 사용 관계, 상속 관계 등 다양함.
자동차객체 밑에 엔진객체, 타이어객체, 램프객체 등이 있듯 위아래 있는 상속관계
와플객체 탄단지객체처럼 서로 사용하는 관계
나물객체 쌀밥객체 계란후라이객체 고추장객체가 모여 비빔밥객체 등
■ 객체 지향 프로그래밍:
줄여서 OOP라고 많이 부른다. Object Oriented Programming
각종 부품 객체를 만들고, 이것을 하나씩 조립해 프로그램을 만드는 기법.
▷OOP 특징 3가지
1. 캡슐화 Encapsulation :
객체의 필드(=속성)와 메소드(=동작)의 내용을 숨기는 것. (나만 볼꺼야! 내 친구들만 볼꺼야! 하는 느낌)
자바에서는 "접근 제한자/Access Modifier"라는 것을 써서, 노출되는 범위를 조절 할 수 있다.
캡슐화의 목적: 외부의 잘못된 조회/수정으로 객체가 손상되는 것을 방지
예: 와플객체는 탄단지객체에게 자신의 칼로리는 알려줘도, 자신의 고객맛평가후기는 알려주고 싶지 않다구!
예: 와플객체는 자신이 맛(누텔라,사과잼,크림치즈) 정보는 동료 와플객체들끼리만 공유할거라구!
2. 상속 Inheritance :
상위(부모) 객체의 필드/메소드를 물려받는 것. 코드를 재사용하여 중복방지. 자식은 부모한테 받는 것 + 자신의 것도 추가 가능
※ 자바 개념 노트 [7]에서 보다 자세히 후술
3. 다형성 Polymorphism
같은 타입이지만 실행결과가 다양한 객체를 이용할 수 있는 성질.
예: 똑같은 와플팬에서 찍어낸 와플객체들이지만 초콜릿소스가 대입되냐 요거트소스가 뿌려지느냐에 따라 칼로리는 달라짐.
자바는 다형성을 위하여 부모클래스 또는 인터페이스 타입 변환을 허용. 부모타입에는 모든 자식객체가 대입될 수 있고,
인터페이스 타입에는 모든 구현 객체가 대입될 수 있다.
▷OOP 과정:
1) 클래스를 설계 (어떤 와플팬을 만들까나. 반달모양? 네모모양? 양면 데우기? 두께는?)
2) 클래스를 가지고 객체를 생성 (와플팬으로 와플을 굽자~)
3) 생성된 객체를 이용 (만들어진 쇼콜라와플, 애플잼와플, 딸기와플 판매하겠습니다 ^^)