TIL 2022-09-21 클래스/객체

JYR00·2022년 9월 21일
0

TIL

목록 보기
12/60

오늘 배울 것

  • 객체지향
  • 클래스 개념 + 생성
  • 객체

객체지향 프로그래밍: 부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 기법.(따로따로->다같이 행동)
<-> 절차지향 프로그래밍 : 순서대로 실행되는 것.
특성: 버튼들
행동: 버튼 누르면 벌어지는 것들.
객체:물리적으로 존재하는 것. 추상적인 것들 중 자신의 속성과 동작을 가지는 모든 것.
객체 상호작용:서로 간 기능(동작)을 이용하고 데이터를 주고받음.

1.집합 관계(완성품, 부품) / 자동차-타이어,엔진,핸들
2.사용 관계(객체가 다른 객체 이용) / 사람-자동차
3.상속 관계 (종류와 구체적인 사물 객체 관계)/ 기계-자동차

객체 지향 프로그램의 특징 3가지

캡슐화

사용방법을 알려주고 내부 구성은 숨기는 방식.(자동차 운전방식만 알려주고 자동차가 어떻게 작동되는지, 엔진은 어떻게 작동되는지 등을 안 알려준다.)
객체가 노출되 제공하는 부분만 이용가능.

상속

상위(부모) 객체의 필드(특성)와 메서드(행동)를 하위(자식)객체에게 물려주는 행위

  • 상위 객체를 재사용해 빠른 개발 가능.
  • 반복된 코드 중복 줄임
  • 유지보수 편리
  • 객체의 다형성 구현

다형성(제일 어려움)

같은 타입이지만 실행 결과가 다양한 객체를 대입할 수 있는 성질.
타이어 -> 타이어 종류 다양 / 다양한 형태로 출력 가능.
키보드 -> 종류 다양


객체와 클래스

클래스 : 설계도/설명서/레시피
클래스는 객체를 생성하기 위한 필드와 메소드가 정의되어있다.
인스턴스 : 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.
하나의 클래스로부터 여러 개의 인스턴스 만들 수 있다.
설계도를 통해 만드는 것 -> 객체화 인스턴스화

객체(object)=인스턴스(instance) 70-80%비슷. 섞어쓰는 편.

붕어빵(객체) 붕어빵틀(클래스)
붕어빵틀이 없으면 붕어빵 만들 수 없다.

자바 클래스 만들기

소스파일 생성: 클래스이름.java(대소문자 주의)

public class 클래스이름{
....
}

-컴파일-> 클래스이름.class

소스 파일 당 하나의 클래스를 선언하는 것이 관례
소스파일이름과 동일한 클래스만 public으로 선언 가능.
선언한 개수만큼 바이트 코드 생성됨

new 연산자

  • 객체 생성 역할

    new 클래스();

클래스()는 생성자를 호출하는 코드
생성된 객체는 힙 메모리 영역에 생성

new 연산자는 객체를 생성한 후, 객체 생성 번지 리턴

클래스 변수

new 연산자에 의해 리턴된 객체의 번지 저장(참조 타입 변수)

힙 영역의 객체를 사용하기 위해 사용

클래스 변수 =new클래스();

용도

라이브러리용

자체적으로 실행되지 않음
다른 클래스에서 이용할 목적으로 만든 클래스

실행용

main()메소드를 가지고 있는 클래스로 실행할 목적으로 만든 클래스


클래스 구성 멤버 3가지

필드->변수

객체의 데이터가 저장됨

생성자

초기화 역할
객체 생성시 자동 실행되는 메서드

메소드(클래스 멤버 메소드)

함수라고도 함. 객체의 동작에 해당하는 실행 블록
함수: 혼자 동작 가능
메소드: 클래스에 포함되어 있음


필드의 내용

객체의 고유 데이터(!)

제작회사 모델 색깔 최고 속도

객체가 가져야 할 부품 객체

객체의 현재 상태 데이터(!)

자동차 크기, 색상, 연식 , 연료, 크기 등


필드 선언

타입 필드[=초기값]

이제까지 변수 선언과 같다.
멤버변수의 사용-> 메서드 안에서 사용해야 한다.

초기값 지정되지 않은 필드는 생성시 초기값으로 됨.

필드 사용

필드 값을 읽고, 변경하는 작업.

객체 내부 : "필드이름"(기존 방법 그대로)으로 접근
객체 외부 : "변수.필드이름"으로 접근(객체명.변수명)

public class Main {
    public static void main(String[] args) {
        Circle pizza;
        pizza = new Circle();

        pizza.radius=10;
        pizza.name="자바피자";

        double area= pizza.getArea();
        System.out.println(pizza.name+"의 면적은 "+area);

        Circle donut = new Circle();
        donut.radius=2;
        donut.name="자바도넛";
        area= donut.getArea();
        System.out.println(donut.name+"의 면적은 "+area);

    }
}

생성자

new 연산자에 의해 호출되어 객체의 초기화 담당

new 클래스();

멤버변수의 기본값 설정
필드의 값 설정
메소드 호출해 객체를 사용할 수 있도록 준비하는 역할 수행.

메서드(method)

:객체의 동작(기능)
원하는 결과를 얻기 위한 소스코드의 묶음.

리턴 타입 메소드 이름 ([매개변수 선언,...]){
....실행할 코드 작성...
}

이름 - 자바의 식별자 규칙을 지켜가면서 만듦
단어의 첫글자는 대문자 나머지는 소문자. 카멜명명법사용

0개의 댓글