본문 바로가기
각종 언어 기본 문법/Java 주제별 정리

자바 개념 노트 [6-1] : CLASS : 클래스,객체, 필드, 메소드, OOP 기초

by 혀니쌤1 2021. 8. 11.

목차

    😃 기본 개념 및 요약  😃
    클래스 = 설계도 = 와플팬
    객체 = 인스턴스 = 설계도로찍어낸것 = 와플
    필드 = 속성 = 특징
    메소드 = 동작 = 함수

     

     

    프로그래밍책에서 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) 생성된 객체를 이용 (만들어진 쇼콜라와플, 애플잼와플, 딸기와플 판매하겠습니다 ^^)