-
[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