ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클래스/생성자
    java/java_basic 2020. 10. 16. 12:17

     

    java는 객체 지향 언어이다.

     

    객체

    의사나 행위가 미치는 대상

    ex) 휴대폰, 책상, 카메라, 컴퓨터 등등

     

    일상에서의 객체의 특징

    • 객체마다 고유한 state와 behavior를 가짐
    • 다른 객체들과 정보를 주고 받는 등, 상호작용하면서 존재

     

    캡슐화

    • 객체를 캠슐로 싸서 내부를 보호하고 볼 수 없게 하는 것

      • 외부의 접근을 관리함(TBD)

    java의 캡슐화

    • class: 객체 모양을 선언한 틀(캡슐화)

      • method(멤버 함수)와 field(멤버 변슈)는 모두 class 내에 구현

    • 객체

      • 글래스 모양대로 생성된 실체(instance)

       

    절차 지향 프로그래밍과 객체 지향 프로그래밍

    • 절차 지향 프로그래밍

      • 작업 순서 표현

      • 작업을 함수로 작성한, 함수들의 집합

    • 객체 지향 프로그래밍

      • 객체들간의 상호 작용으로 표현

      • 클래스 혹은 객체들의 집합으로 프로그램 작성

    클래스와 객체

    • 클래스(class)

      • 객체를 만들어내기 위한 설계도 혹은 틀

      • 객체의 속성(state)과 행동(behavior) 포함

    • 객체

      • 클래스의 모양 그대로 찍어낸 실체

      • 프로그램 실행 중에 생성되는 실체

      • 메모리 공간을 갖는 구체적인 실체

      • instance라고도 부름

    • ex)

      • class: 자동차 사람 휴대폰

      • 객체: 소나타  장근원  갤럭시

    클래스 선언

    class 클래스_이름{

             필드_선언

             객체생성자_선언

             메소드_선언

    }

    • 1. 클래스 이름
      • 키워드 class 다음에 명시되는 식변자(클래스 이름) 
        • 객체의 상태와 행동 정의 
        • 선언되는 클래스를 대표하는 이름
        • 객체 생성 시 사용 (TBD)
      • 클래스 이름의 문자 구성과 명명 원칙
        • 첫 문자는 영어 대문자로 시작: Class
        • 여러 단어 결합할 경우 각 단어의 첫 문자를 대문자로 시작: itaswonClass
    • 2. 필드 선언
      • 객체의 상태 저장할 변수
        • 필드 타입: 기본 타입, 클래스 타입, 배열 타입 등 모든 타입 가능
        • 필드명: 영어 소문자로 시작하는 것이 관례, 여러 단어로 구성되면 2번쨰 이후 단어의 첫문자는 대문자
          • string currentLocation
          • string name
          • int age 등등
    • 3. 객체 생성자 선언
      • 클래스 객체가 생성될 때, 초기화 작업을 수행하는 특별한 메서드
        • 객체 생성자는 클래스 이름과 같은 이름의 메서드로 선언되어야 한다
        • 매개 변수 가질 수 있으며, 반환값 타입 없음
    • 4. 매서드 선언
      • 매서드 시크니처와 매서드의 구현으로 구성됨
      • 메서드 시그니처
        • 메소드 호출에 필요한 정보 표시: 메서드 반환값 타입, 메서드 이름, 매개변수 등
      • 메서드 구현
        • 메서드가 호출되었을 때 수행할 문장들 기술한다.
      • -> 매서드는 class의 함수라고 생각하면 편하다.

    선언된 클래스 사용

    클래스가 선언된 후 객체 생성

    -> 반드시 new 키워드를 이용하여 생성

     

    ex)

    Person mine; -> 클래스 이름 사용, 클래스 타입으로 사용

    mine = new Person("mine"); -> 클래스 이름 사용 == 객체 생성자 호출에서 사용할 수 있다.

    mine.setAge(29); -> 객체 참조 변수를 메소드 접근 가능

     

    객체 생성 및 참조

    Java에서 객체 다루기 위한 4가지 작업

    ① 클래스 작성: 객체의 상태와 행동 정의하는 클래스 작성

    ② 객체 생성: 작성된 클래스의 객체 생성

    ③ 객체 참조: 생성된 객체를 객체 참조변수에 저장하여 참조할 수 있게 함

    ④ 필드와 메소드 접근: 객체 참조변수 이용하여 참조되는 객체의 필드와 메소드 접근

     

     

    생성자!!!

    • 생성자는 여러 개가 될 수 있다
      • 초기화 조건에 따라서 필요에 의해 다양하게 생성할 수 있다
    • 매개변수가 없는 생성자도 있다.
      • ex) Person g = new Person();
      • 매개변수가 없는 생성자는 default생성자로 불린다.
      • 클래스에 생성자가 하나도 선언되지 않은 경우, 컴파일러에 의해 자동으로 삽입
    • 기본 생성자가 자동 생성되지 않는 경우
      • 클래스에 생성자가 하나라도 작성한 경우
      • 자신이 구현한 생성자를 사용하겠다고 명시를 한 것

    정리

    New 연산자와 함께 호출됨

    기본생성자 (default) + 매개변수를 갖는 개발자가 구현한 생성자

     

    이점

    • 간결한 프로그램
      • 객체 생성과 객체 초기화가 하나의 문장으로 이루어지므로 프로그램이 간결해진다.
    • 높은 응집도:
      • 객체 생성과 초기화 작업이 하나의 단위작업으로 이울어지므로 응집도(cohesion) 높임
    • 초기화 실수 방지
      • 객체 생성 시 객체 생성자 반드시 호출해야 하므로 필수적인 초기화 작업을 실수로 하지 않는 잘못 방지할 수 있음

    this 래퍼런스

    • this: 객체 자신에 대한 레퍼런스
      • 컴파일러에 의해 자동 관리되기 때문에 개발자는 사용하기만 하면 됨
      • -> class가 가진 필드명을 가리킨다. == 이름이 똑같은 변수끼리 구분을 해준다.
      • -> 하나는 지역변수(or전역변수) 하나는 class가 가진 필드명
    • 매개변수명이나 지역변수명이 필드명과 같지 않은 경우 this. 생략 가능
    • ->그러나 this.를 습관화 하는게 좋다. 

    Class field/method

    ex)

    사람은 모두 각각 눈을 가지고 태어난다

    세상에는 이미 공기가 있다. 태어난 사람은 모두 공기를 공유한다.

    -> Person을 New를 통해 생성한 객체들은 name, age 등을 각각 가지고 있지만 공기라는 특성은 모든 Person이 동일하게 소유 또는 공유하고 있다. -> Class field / Class method

     

    Class field / Class method

    • Class의 상태와 행동 나타내는 필드와 메소드
    • static 키워드가 명시된 필드와 메소드
    • 객체 또는 클래스에 의해 참조 가능하지만 대개 클래스에 의해 참조됨
    • 객체 생성하지 않고서도 클래스 필드 참조 또는 클래스 메소드 호출 가능

    (static: 메모리에 한번 할당 되어 프로그램이 끝날때까지 그 메모리에 값이 유지된다.) -> 정적 변수

     

    Class field, Class method → static member

    그냥 field, method → non-static member

     

    class Sample {

           int n; // non-static 필드

           void g() {...} // non-static 메소드

     

           static int m; // static 필드

           static void f() {...} // static 메소드

    }

     

    non-static member 특징(인스턴스 멤버)

    • 공간적 특성 – 멤버들은 객체마다 독립적으로 별도 존재(인스턴스 멤버라고 부름)
    • 시간적 특성 – 필드와 메소드는 객체 생성 후 비로소 사용 가능
    • 비공유 특성 - 멤버들은 다른 객체에 의해 공유되지 않고 배타적

    static member(클래스 멤버)

    • 공간적 특성 - static 멤버들은 클래스 당 하나만 생성 (객체마다 생성 X) -> 클래스 코드가 적재되는 별도의 메모리 공간에 생성된다
    • 시간적 특성 – static 멤버들은 클래스만 선언되어 있으면 사용 가능 (객체 생성이랑 무관)
    • 공유의 특성 - static 멤버들은 동일한 클래스의 모든 객체에 의해 공유

    Class method 언제 쓸까?

    프로그램 내에서 공통으로 사용하고자 하는 매서드 클래스 사용한다.

    댓글

Designed by Tistory.