[자바/Java] 클래스(class)란?

resilient

·

2020. 12. 17. 17:36

728x90
반응형

https://github.com/whiteship/live-study

 

whiteship/live-study

온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub.

github.com

목표

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

학습할 것 (필수)

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

마감일시

2020년 12월 19일 토요일 오후 1시까지.

과제 (Optional)

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

#자바의 클래스란??

 

클래스란 '객체를 정의해놓은 것' 또는 '객체의 설계도 또는 틀' 이라고 정의 할 수 있다.

클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다. 

 

클래스는 단지 객체를 생성하는데만 사용될 뿐, 객체 그 자체는 아니다.

프로그래밍에서는 먼저 클래스(설계도)가 작성된 후에, 객체(물건)을 생성하여 사용한다.

설계도만 잘 만들어 놓으면 제품을 만들 때마다 고민할 필요없이 좋은 물건을 만들 수 있다.

 

#객체와 인스턴스

 

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 부르고, A클래스로부터 만들어진 객체를 A의 인스턴스라고 한다.

 

객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 객체는 다수의 속성과 다수의 기능을 갖는다. 속성과 기능의 집합이라고 할 수 있다.

클래스는 객체를 정의한 것이므로 클래스에는 당연히 객체의 모든 속성과 기능이 정의되어있다. 

객체를 생성하면, 클래스에 정의된 속성과 기능을 가진 객체가 만들어 지는 것이다.

속성은 '멤버변수', 기능은 ' 메서드' 라고 사용한다.

 

#클래스 & 객체 만드는 방법

 

먼저 예시로 코드를 작성해보면서 이해해보려고 한다.

 

Car 클래스 (예시1)

Car 클래스를 만들고 그안에는 색,브랜드,가격 속성을 가지고 있고 생성자와 메소드를 함께 가지고 있다.

 

이제 객체를 한번 만들어보자.

객체 생성(예시2)

인수의 여부에 따라 다른 생성자로 구분하여 객체가 생성된다.

인수가 없도록 만든 Car객체의 mycar1과 인수를 3개입력한 mycar2의 내용이 다르다.

 

<new키워드>에 의해 Car 클래스의 인스턴스가 mycar1과 mycar2가 가리키는 메모리의 빈 공간에 생성이 된다.

 

#메소드 정의하는 방법

 

메소드란 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.

'함수'와 유사하다. 어떤 값을 입력하면, 작업을 수행해서 결과를 반환해준다.

 

ex) Math.sqrt() 를 사용하면

4라는 값을 넣으면 -> Math.sqrt() -> 2를 결과로 반환해준다.

 

메소드를 사용하는 이유는 크게 세 가지가 있다.

 

1. 높은 재사용성

한번 만들어놓은 메소드들은 계속해서 몇 번이고 호출해서 사용할 수 있다.

 

2. 중복된 코드의 제거

프로그램을 작성할때, 같은 내용의 문장들이 여러 곳에서 반복해서 나타나는데,

이렇게 반복되는 문장들을 묶어서 하나의 메소드로 작성해 놓으면, 메소드를 호출하는 한 문장으로

대체 할 수 있고, 이렇게 되면 소스코드의 길이도 짧아지게 된다.

 

3. 프로그램의 구조화

main메소드는 프로그램의 전체 흐름이 한눈에 들어올 정도로 단순하게 구조화하는 게 좋기 때문에,

main메소드안에 모든 문장을 넣는 프로그램 방식은 좋지 않다.

그렇기 때문에 코드들을 작업 단위로 나눠서 여러 개의 메소드에 담아 프로그램의 구조를 간단하게 할 수 있다.

 

메소드를 정의해보자

 

add 더하기 메소드를 작성해보았다(예시3)

이렇게 반환 타입, 메소드이름, 매개변수선업(입력될 값들)을 선언 해주고

메소드의 반환타입이 void형 반환 타입이 아닌 경우,  구현부 {} 안에 'return'을 사용해서 반환될 값을 정해준다.

 

#생성자 정의하는 방법

 

생성자는 인스턴스가 생성 될 때 호출되는 '인스턴스 변수를 초기화하는 메소드' 이다.

메소드처럼 클래스 내에 선언되고, 구조가 메소드와 비슷하지만 retrun 값이 없다.

이 때 생성자의 이름은 클래스의 이름과 같아야 한다.

 

위에서 사용했던 예시1

 

여기서 생성자와 생성자 2로 작성한 곳을 보면

생성자 2 부분은 인스턴스를 생성하는 동시에 원하는 값으로 초기화할 수 있게 작성했다.

 

 

예시2 부분 참조

예시 2를보면 Car mycar1 = new Car();

                  Car mycar2 = new Car("yellow","BENZ",200);

이 부분이 new를 이용해서 생성자를 통해 인스턴스를 만드는 내용이다.

 

#this키워드 이해하기

 

생성자 간에도 서로 호출이 가능한데 두 조건을 만족시켜야 한다.

1. 생성자의 이름으로 클래스 이름 대신 this를 사용하거나

2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 처 줄에서만 호출이 가능하다.

예시1 변형

this로 Car의 기본 값을 저렇게 초기화해주면 

Car()을 출력했을 때

이렇게 나오는 것을 알 수 있다.


과제 (Optional)

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

#이진 트리(Binary Tree)란?

컴퓨터 과학에서, 이진 트리는 각각의 노드가 최대 두 개의 자식 노드를 가지는 트리 자료 구조로, 자식 노드를 각각 왼쪽 자식 노드와 오른쪽 자식 노드라고 한다.

 

먼저 int값을 가지고 있는 이진트리를 나타내는 Node클래스를 정의한다

(int value, Node left, Node right)를 가지고 있어야 한다.

먼저 Node라는 이름의 클래스를 만들어주고 그안에 (int value, Node left, Node right) 를 넣어준뒤,

사용할 수 있도록 Getting Getter Setter 를 통해 메소드를 자동으로 생성해주고, Getting Constructor using field 를 통해 생성자까지 만들어준다. (Alt +shift+s)

 

이진 탐색 트리에는 몇가지 특징이 있다.

 

1. 이진 트리의 순회(traversal)란 이진 트리의 모든 노드를 특정한 순서대로 한 번씩 방문하는 것이다.

순회하는 방법에는 전위(preorder), 중위(inorder), 후위(postorder) 순회가 있다.

 

2. 이진 탐색 트리는 같은 데이터를 갖는 노드(중복값)는 없어야 하며, 왼쪽 서브 트리에 있는 모든 데이터는 현재 노드의 데이터보다 작고, 오른쪽 서브 트리에 있는 모든 노드의 데이터는 현재 노드의 데이터보다 크다.

 

처음 노드에 있는 root값을 시작으로 루트값보다 작으면 왼쪽노드, 크면 오른쪽 노드로 이동하면서 이동하면 된다. (중복값은 없다.) 

 

#BinrayTree라는 클래스를 정의하고 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현

 

 

 

# Reference

hgney.com/1054?category=901033

라이브 스터디 팀원분 블로그 www.notion.so/5-b45405eb7478496391531b48fb2df35c

http://blog.naver.com/bumwoo80/222170396242 

자바의정석 (저자. 남궁성)

 

반응형