ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [live-study] 5주차 :: 클래스
    JAVA/라이브 스터디 | whiteship 2021. 1. 1. 04:11

    https://youtu.be/HLnMuEZpDwU

    참고도서 : Java의 정석, Java in a Nutshell

     

     

     


    0. 객체지향프로그래밍

    객체(Object) 란
    • 객체는 실제로 존재하는 것이다. 흔히 우리가 주변에서 볼 수 있는 사물들(자동차, 책, ..)이 곧 객체이다.
    객체지향프로그래밍 (Object-Oriented Programming, OOP)
    • 객체지향프로그래밍이란 컴퓨터 프로그래밍 패러다임 중 하나로 프로그래밍에 필요한 데이터를 추상화하여 객체를 만들고, 그 객체간의 상호작용으로 프로그래밍 하는 기법이다.
    • 객체지향언어(Object-Oriented Language)는 말 그대로 객체지향 프로그래밍 언어이다. 최초의 객체지향언어인 Simula를 포함해 C++, Java 등이 있다.
    객체지향언어의 장점
    • 재사용성이 높다 : 기존의 코드를 이용하여 새로운 코드를 쉽게 만들 수 있다.
    • 관리가 편리하다 : 코드간의 관계를 이용하여 보다 쉽게 코드를 변경할 수 있다.
    • 신뢰성이 높다 : 중복된 코드를 제거하여, 오동작을 방지 할 수 있다. 

    1. 클래스 정의하는 방법

    클래스와 객체
    • 클래스는 객체의 설계도이다.
    • 객체는 속성과 동작으로 구성되어 있으며, 물리적인 것(자동차, 책, 의자, ..) 과 추상적인 것(학과, 강의, ...) 모두 포함한다.
    • 객체는 클래스를 통해 만들 수 있다. 이렇게 만들어진 객체를 인스턴스라고도 하는데, 그래서 클래스를 객체로 만드는 과정을 인스턴스화라고도 한다.

    2. 객체 만드는 방법 (new 키워드 이해하기)

    객체의 속성과 동작
    • 속성 (Field)은 객체의 상태를 나타내는 것으로 사람 클래스가 있다고 가정하면 이름, 나이, 성별 등이 속성이 될 수 있다.
    • 동작 (Method)은 객체의 동작을 나타내는 것으로 사람 클래스가 있다고 가정하면 달리다, 걷다, 먹는다 등이 동작이 될 수 있다.
    객체의 생성
    • 클래스타입 변수명 = new 클래스명();
    • new에 의해 클래스의 인스턴스가 메모리의 빈 공간에 생성된다. 이 때, 멤버변수는 각 자료형에 해당하는 기본값으로 초기화 된다. 
    • 클래스로부터 인스턴스를 생성하고, 속성과 동작을 사용하는 전체적인 코드는 아래와 같다.

    • 위의 코드를 그림으로 간략하게 나타내면 다음과 같다.

    객체 배열
    • 변수가 여러개 일 때 배열로 만들어서 관리를 했던 것 처럼, 객체도 하나가 아니라 여러개 일 때, 배열로 만들어서 관리 할 수 있다. 이를 객체 배열 이라고 한다. 객체 배열 안에는 객체가 저장되는 것이 아니고, 객체 각각의 주소가 저장된다. 

     

    3. 메소드 정의하는 방법 (+변수)

    변수
    • [2주차 중 변수의 스코프와 라이프타임]에서 잠깐 변수의 종류에 대해서 설명한 적이 있다.
    • 변수는'변수의 선언 위치'에 따라 클래스변수, 인스턴스변수, 지역변수 총 3종류로 나눌 수 있다.
    • 클래스변수(Class Variable)는 변수 앞에 "static"을 붙이면되고, 클래스가 메모리에 올라갈 때 만들어진다. 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성인 경우 사용된다.
    • 인스턴스변수(Instance Variable)는 클래스 영역 내에 선언 되며 클래스의 인스턴스를 생성할 때 만들어진다.
    • 지역변수(Local Variable)는 메서드 내에 선언 되며, 메서드 실행시 생성되고 메서드가 종료되면 소멸된다.

     

    메소드
    • 메소드는 객체의 동작을 나타내는 것으로 특정 작업을 하나로 묶은 것이다.
    메소드의 장점
    • 재사용성이 높다. 
    • 중복되는 코드가 제거된다. 반복되는 코드를 하나의 메소드로 묶어서 호출할 수 있다.
    • main 메소드에 뭉쳐져있던 코드를 작업별로 묶어, 여러개의 메소드로 만들어 프로그램을 구조화 시킬 수 있다.
    메소드의 선언과 구현
    • 메서드 선언부는 반환타입, 메서드명, 매개변수로 구성되어 있다.
    • 메서드 구현부는 선언부 아래 블록 { }부분을 말한다.

     

    메소드의 호출
    • 매개변수가 있는 메소드를 호출할 때는 괄호 안에 지정해 둔 인자(argument)의 개수는 호출되는 메소드의 매개변수 개수와 일치해야 한다. 또한, 타입은 일치하거나 형변환이 가능해야한다.

    클래스 메서드와 인스턴스 메서드
    • 변수와 마찬가지로 메서드 앞에 static이 붙어 있으면 클래스메서드(static), 아니면 인스턴스 메서드로 나눌 수 있다.
    • 클래스 메서드는 인스턴스를 생성하지 않아도 사용할 수 있다. 클래스이름.메서드이름으로 호출이 가능하다. 또한, 모든 인스턴스에 공통된 값이 유지되어야 하는 변수에는 static을 붙여 클래스변수로 정의한다.
    • 인스턴스 메서드는 인스턴스 변수와 관련된 작업을 할 때 사용되며, 반드시 객체를 생성해야지만 호출할 수 있다.

     

    4. 생성자 정의하는 방법

    생성자(Constructor)
    • 클래스를 통해 인스턴스를 생성할 때 호출되는 인스턴스 초기화 메서드이다.
    • 생성자는 클래스 이름과 같아야 하며, 리턴값이 없고 키워드 void 등을 붙이지도 않는다.
    • 생성자는 매개변수가 없는 생성자와 있는 생성자가 있다.

    생성자가 인스턴스를 생성하지 않는다.
    • 위에서 언급했듯이 new에 의해서 클래스의 인스턴스가 생성된다. 

     

    기본 생성자(Default Constructor)
    • 모든 클래스는 생성자가 반드시 하나 이상 존재한다. 
    • 클래스 내부에 생성자 선언을 생략했어도 인스턴스를 생성할 수 있었던 건 컴파일러가 '기본 생성자'를 자동으로 추가하기 때문이다. 
    • 만약 매개변수가 있는 생성자를 추가하는 경우, 기본 생성자를 반드시 추가해주어야 한다. 기본 생성자는 클래스에 선언된 생성자가 하나도 없을 때만 컴파일러가 추가를 한다. 따라서, 기본 생성자가 없는데 매개변수가 있는 생성자를 추가하면 에러가 발생한다.

     

    5. this 키워드

    this
    • 인스턴스 자기 자신을 가리킬 때 사용된다.주로 생성자의 매개변수 이름이 인스턴스변수와 같은 경우 인스턴스변수 앞에 "this"를 붙여서 구별한다.
    • this는 인스턴스멤버만 사용할 수 있다.

    6. 추가과제 (추후 추가 예정)

    int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요.
    int value, Node left, right를 가지고 있어야 합니다.
    반복문BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node)
    DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요.

     

    댓글

Programming Diary