ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA9] 객체지향 모델링
    비전공자 공부일기/:: JAVA 2020. 3. 11. 02:15

    한국기술교육대학교 온라인평생교육원
    모던웹개발을 위한 JAVA9 프로그래밍
    8회차 수업

     

     

    자바는 '객체지향'이다 라는 말을 많이 들어보았을 것이다.

    이 객체지향이 대체 뭘 가리키는 말인지 배워보는 수업

     

     

    학습목표

    1) 클래스 정의 - 클래스를 작성하고 객체를 생성할 수 있다.

    2) 생성자 정의 - 사용자 정의 클래스를 작성할 수 있다.

     

    사전지식

    - 클래스도 타입이다. 즉, 클래스로 새로운 타입을 생성할 수 있다.

    - 자바에서는 기본형을 제외한 모든 것이 객체이다.

     

    객체지향이란?

    - 객체(Object)로 프로그램을 작성하는 프로그래밍 패러다임

    - 전체 어플리케이션을 객체로 분리하여 모델링

     

     

     

    ** 강사님 설명

     

    객체지향이란? 

    어플리케이션이란, data를 조작하고 처리하는 게 핵심이다.

    객체가 발명되기 전에는 data type이 기본형만 사용할 수 있었다.

    객체지향은 data type을 별도로 만들어서 사용 가능한 프로그래밍이다.

     

    자바는 모든 객체들이 똑같은 구조로 만들어지도록 지원하는데, 이 지원하는 구조가 class이다.

    자바는 클래스(class)와 객체(object)를 모두 사용하는 언어이다.

    즉, 자바는 객체를 만들기 위해 반드시 먼저 클래스(=type)를 만들어야 한다.

    이 데이터 타입으로 클래스를 만들고, 클래스에서 객체가 파생이 된다.

     

    객체 내부에는 데이터 또는 데이터+함수가 들어있다.

    함수는 객체 내부에 있는 데이터와 연관된 작업을 수행하며

    내부의 데이터를 변형시키거나 / 외부에서 접근 가능하게 하는 역할을 한다.

     

    객체가 발명되기 전에는 과거에는 함수를 호출하는 방식으로 프로그램을 작성했다.

    그 후, 함수에서 한 차원 업그레이드 된 것이다. 함수+어떠한 상태 = 객체

    객체의 메소드를 호출할 때 내부 상태가 어떻게 바뀌는지 알 필요가 없다.(캡슐화, encapsulation)

     

     

    객체 사용방법 및 사례

    - 객체는 바로 사용할 수 없고, 클래스를 통해 객체를 생성 후 사용

     

    ex) Scanner abc = new Scanner(System.in);

    = Scanner라는 타입에 대한 abc라는 객체를 생성하겠다는 문장.

    >> Scanner라는 클래스를 통해, new 키워드를 사용해 객체를 생성

    System.in은 생성자와 관련됨(나중에 학습)

     

    System.out.println(scn.next());

    >>이런 식으로 next()라는 함수를 호출하면 abc에 들어있는 데이터가 바뀌게 된다.

     

     

    객체 참조

    - 변수에는 오직 객체의 참조만을 담을 수 있음

    - 두 참조가 같은 객체를 가리킬 수도 있음

     

    변수가 생성되면 Stack 이라는 영역에 저장된다.

    그리고 값을 저장하면 Heap 영역에 따로 저장되고,

    Stack에 생성된 변수에는 주소값(Heap에 저장된 값의 주소)이 저장된다.

     

    변수에 null이라는 값이 들어가게 되면,

    변수는 더이상 객체를 참조하지 않는다는 뜻이다. >> 나중에 nullPointException을 불러일으킬 수 있다.

     

     

    사용자 정의 클래스 만들기

     

    - 클래스 작성에는 클래스명=파일명 이 원칙

     

    - 객체는 데이터+함수로 구성

    데이터에 해당되는 부분이 멤버변수= 필드(field)= 인스턴스 변수(instance variable)

    데이터에 해당되는 부분이 멤버함수= 메소드(method)= 인스턴스 메소드(instance method)

     

     

    접근 제한자

     

    - Java는 메소드 혹은 변수마다 접근의 범위를 제한시키기 위해 접근 제한자를 지원

     

    접근제한자 클래스 내부 동일 패키지 하위 클래스 그 외의 영역
    public O O O O
    protected O O O X
    default (생략가능) O O X X
    private O X X X

     

    public은 모두 가져다 쓸 수 있는 것

    protected는 상속 개념에서 다루는데, 하위 클래스에서 사용할 수 있다.

    default는 선언이 생략 가능하지만, 실무에서는 어떤 접근제한자든 명시적으로 적어주는 것이 좋다.

    private 메소드를 사용하는 이유는, 클래스 내부에서만 사용한다는 것을 명시적으로 표시하는 것인데

    메소드를 작게 관리하는 것이 확장성에 유리하므로 private 메소드를 이용해 내부적으로 쪼개는 것

     

    자바에서 왠만하면 필드의 선언은 private으로 선언하고, 이 필드에 접근할 수 있는 메소드(setter, getter)를 통해 접근하는 것이 일반적인 룰이다. public을 사용해도 가능하긴 하지만 일단 자바의 문화라고 받아들이자.

     

    객체의 상태를 바꾸는 메소드 - 변경자

    - setter, mutator라고도 함

     

    객체의 상태를 알려주는 메소드 - 접근자

    - 사실 변경자를 제외한 대부분의 메소드는 접근자라고 할 수 있다.

    - getter, accessor라고도 함

     

    객체 변경은 위험할 수 있어 가능한 접근자 메소드만 제공하는 방법 고려

    - 두 연산이 한 객체를 동시에 변경할 때 - 멀티 CPU가 보편화

     

     

    생성자(Constructor)

     

    생성자

    - 객체를 생성할 수 있음

    - 주로 멤버변수를 초기화할 때 사용

     

    특징)

    - public으로 선언된다. private으로 선언도 가능하지만, 이경우 객체 생성이 불가능함

    - new 키워드로 객체를 생성할 때 사용된다.

    - 클래스와 이름이 같다

    - return 타입이 없다(void도 적지 않음)

    - 상속되지 않는다

     

    생성자 오버로딩

    - parameter의 개수와 관련해서 동일한 이름으로 여러가지 버전을 만들 수 있다.

    이걸 오버로딩이라고 함

     

    기본 생성자, Default constructor

    - 인자(parameter) 없는 생성자를 뜻함

    - 명시적으로 생성자를 작성하지 않으면 자동으로 생성된다

    - but, 인자가 있는 생성자를 하나라도 작성하면 기본 생성자는 생기지 않음

     

     

     

    댓글

coding wanee