ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [5주차]클래스
    스터디/[whiteship]JAVA 2021. 2. 12. 18:38

    자바의 Class에 대해 학습하세요.

    학습할 것 (필수)

    • 클래스 정의하는 방법
    • 객체 만드는 방법 (new 키워드 이해하기)
    • 메소드 정의하는 방법
    • 생성자 정의하는 방법
    • this 키워드 이해하기

    과제 (Optional) - 추후 추가예정

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

    먼저 클래스란, 객체를 선언한 모양의 틀이자 설계도이다. 이러한 설계도를 가지고 생성된 것을 인스턴스라고 한다.

    또한 자바언어의 특성, 즉 객체지향 언어의 특성에따라 다음과 같은 개념이 존재한다.

    • 캡슐화
      • 객체를 클레스란 개념의 캡슐로 그 자체를 감싸 내부를 보지 못하게 함으로써 외부의 접근으로 안전해진다. 
      • 객체는 캡슐화가 기본 원칙
      • 하지만 외부와 접속을 위한 몇 부분만 공개 노출
    • 다형성
      • 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 구현되고 작동된다는 뜻을 말한다.
      • 메소드 오버로딩
        • 클래스 내 같은 이름의 메소드를 여러개 정의한다는 뜻이다.
        • 조건은 매개변수 타입, 갯수가 다르면 메소드 오버로딩이 가능하다.
      • 메소드 오버라이딩
        • 수퍼 클래스(부모 클래스)에 정의된 같은 이름의 메소드를 상속받은 클래스에서 재정의를 통해 서로 다른 내용을 구현하고 실행한다.
        • 런타임 시간에 실행할 메소드를 결정하는 동적 바인딩에 의해 오버라이딩된 메소드가 실행된다. 
    • 상속
      • 상위 개체의 속성(메소드, 필드)을 하위 개체에서 물려받는 것으로, 하위 개체는 상위개체와 자기 자신의 속성을 가지고 있음.
      • 자바에서 다중상속을 불허.

    클래스 정의하는 방법

     

    -형식-

    접근지정자 class 클래스이름{

     필드...

     메소드...

    }

      public void hello(){
            System.out.println("나라별 인사");
        }


    public class Test {
    public static void main(String[] args) {
    System.out.println("클레스");
    }
    }
    • 접근지정자의 경우 default, private, protect, public이 존재한다.
    • 클래스이름의 경우 파일의 이름과 동일해야 한다.

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

    문법: 클래스이름 레퍼런스 = new 클래스이름(생성자);

    다음과 같은 Person 클래스가 있다고하자.

    public class Person {
        int age;
        String name;
    
        public void hello(){
            System.out.println("나라별 인사");
        }
    
    }
    

    Person클래스를 객체(인스턴스)로 만드는 방법은 new키워드를 작성한다.

    public class Test {
        public static void main(String[] args) {
            Person person = new Person();
        }
    }

    이렇게 되면 Heap영역에 Person객체가 생성되며 GarbageCollection의 관리 되상이 된다.


    메소드 정의하는 방법

    메소드를 정의하는 방법은 다음과 같다

    문법 : 접근지정자 반환타입 메소드이름(매개변수){구현체...}

      public void hello(){
            System.out.println("나라별 인사");
        }

    생성자 정의하는 방법

    • 먼저 생성자는 new 키워드로 해당 클래스를 객체로 만드는 과정에서 초기화 역활을 한다.
    • 생성자가 정의되어 있지 않으면 기본 생성자(default)를 호출하며 이 기본 생성자는 아무일도 하지 않는다.
    • 생성자는 여러개를 지정할 수 있다.
    public class Person {
        int age;
        String name;
    //    기본 생성자(default)
        public Person(){
            
        }
    //    age를 초기화하는 생성자
        public Person(int age){
            this.age = age;
        }
    //    name을 초기화하는 생성자
        public Person(String name){
            this.name=name;
        }
        
        public void hello(){
            System.out.println("나라별 인사");
        }
    
    }
    

    이렇게 정의된 생성자를 다음과 같이 객체를 생성함과 동시에 호출해 객체를 초기화 할 수 있다.

    public class Test {
        public static void main(String[] args) {
            Person person = new Person(); //기본생성자를 호출해 객체를 초기화
            Person person_age = new Person(27); //나이를 초기화해 객체를 생성
            Person person_name = new Person("seong jun"); //이름을 초기화해 객체를 생성
        }
    }
    

    this 키워드 이해하기

    • this 레퍼런스는 객체 자신에 대한 레퍼런스로써 메소드 안에서 사용한다.
    • 주로 생성자를 호출할때 객체의 필드를 초기화 할때 사용한다.
    • static 메소드(정적메소드)는 객체 없이도 존재가 가능하기 때문에 this키워드를 사용 불허한다.
    • this키워드는 생성자를 호출하는 this()와 객체의 필드를 초기화할대 사용하는 this로 의미가 다른 키워드이다.

    this() 키워드

    • 클래스 내에서 생성자가 다른 생성자를 호출할때 사용한다.
    • this()키워드는 같은 클래스의 다른 생성자를 호출할 때 사용한다. -> 생성자 체이닝이라고도 한다.
    • this()는 생성자의 첫 번째 문장으로 사용되어야 한다.
    public class Person {
        int age;
        String name;
    //    기본 생성자(default)
        public Person(){
            this(4);
        }
    //    age를 초기화하는 생성자
        public Person(int age){
            this.age = age;
        }
    //    name을 초기화하는 생성자
        public Person(String name){
            this.name=name;
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Person person = new Person(); //기본생성자를 호출해 객체를 초기화
            System.out.println(person.age);
        }
    }
    

    결과는 4가 출력된다.

     

    '스터디 > [whiteship]JAVA' 카테고리의 다른 글

    [13주차]IO  (0) 2021.02.20
    [6주차]상속  (0) 2021.02.15
    [4주차]제어문  (0) 2021.01.26
    [3주차]자바가 제공하는 다양한 연산자  (0) 2021.01.23
    [2주차]자바 데이터 타입, 변수 그리고 배열  (0) 2021.01.12
Designed by Tistory.