-
백기선님의 Java 스터디를 진행하며 찾아본 내용입니다.
목표
자바의 Class에 대해 학습하세요.
학습할 것
- 클래스 정의하는 방법
- 객체 만드는 방법 (new 키워드 이해하기)
- 메소드 정의하는 방법
- 생성자 정의하는 방법
- this 키워드 이해하기
과제 (Optional)
- int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요.
- int value, Node left, right를 가지고 있어야 합니다.
- BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요.
- DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요.
클래스 정의하는 방법
Syntax:
1234class MyClass extends MySuperClass implements YourInterface {// field, constructor, and// method declarations}cs - 오직 하나의 클래스만 상속받을 수 있다
- 하나 이상의 인터페이스를 구현 할 수 있다.
객체 만드는 방법
Syntax:
12ClassName ex1 = new ClassName(parameter1, parameter2, ...);Something ex2 = new Something(parameter3, parameter4, ...);cs 다음 3단계를 따른다
- Declaration: 위 Syntax '='연산자의 왼쪽 부분에서 객체를 가리키는 변수를 선언한다.
- Instantiation: 'new' 키워드를 통해 객체를 생성한다
- Initialization: 'new' 키워드가 클래스의 생성자를 호출하여 객체를 초기화한다.
new 연산자
new 연산자는 새 객체에 메모리를 할당하고 해당 메모리에 대한 참조를 반환하여 클래스를 인스턴스화 하는 과정을 진행한다.
'클래스를 인스턴스화 한다'라는 것은 '객체를 만든다'라는 말과 동의어이다.
다음과 같은 클래스가 있다고 하고
123456789public class Point {public int x = 0;public int y = 0;//constructorpublic Point(int a, int b) {x = a;y = b;}}cs 다음과 같이 인스턴스화 했을 때
메소드 정의하는 방법
Syntax:
1234public return_type method_name(parameter1, parameter2, ...) {//do something}cs 메소드 이름 짓기
convention에 따라 메소드 이름은 반드시 소문자 동사로 시작해야 하며 여러 단어가 사용될 경우 동사가 맨 처음에 나오고 뒤에 형용사나 명사가 나와야 한다.
Overloading Method
123456789101112131415public class DataArtist {...public void draw(String s) {...}public void draw(int i) {...}public void draw(double f) {...}public void draw(int i, double f) {...}}cs 위와 같이, 같은 이름의 메소드를 파라미터를 다르게 줌으로써 다른 결과를 만들어 낼 수 있다.
* 메소드 오버로딩은 코드를 복잡하게 만들 수 있기 때문에 자주 사용해서는 안된다
생성자 정의하는 방법
클래스는 객체를 생성할 때 호출되어지는 청사진인 생성자를 반드시 하나는 가지고있다.
생성자는 리턴타입이 없으며 생성자 이름으로 class 이름을 받는다
123456789class Bicycle {public Bicycle(int startCadence, int startSpeed, int startGear) {gear = startGear;cadence = startCadence;speed = startSpeed;}}cs 1Bicycle myBike = new Bicycle(30, 0, 8);cs 위와 같이 클래스가 호출되어 질 때 new 연산자에 의해 생성자가 호출되어 지고, 메모리에 공간을 할당한 뒤 field의 값들을 초기화해준다.
생성자는 파라미터의 개수, 타입등을 다르게 함으로써 여러개를 오버로딩 해줄 수 있는데,
자바 플랫폼은 파라미터의 수 및 유형에 따라 생성자를 구별한다.
만약 파라미터의 개수와 타입이 똑같은 생성자를 선언하게 되면 컴파일 에러가 발생하게 된다.
생성자를 직접 선언하지 않을 경우 자바 컴파일러는 슈퍼클래스로부터 인수가 없는 생성자를 찾아 제공해준다.
만약 슈퍼클래스를 명시해두지 않았을경우 'Object' 클래스로부터 생성자를 제공해준다.
생성자의 선언에서 access modifier를 이용해 호출 할 수 있는 범위를 제어할 수 있다.
this 키워드
인스턴스 메소드 또는 생성자 내에서, this 키워드는 '현재 자기 자신의 객체'를 참조한다
Using the with a Field
Field에서 this를 사용하는 이유는 메소드나 생성자의 파라미터가 어떤 것을 호출하는 지 헷갈릴 수 있기 때문이다.
figure 1.
12345678910public class Point {public int x = 0;public int y = 0;//constructorpublic Point(int a, int b) {x = a;y = b;}}cs figure 2.
12345678910public class Point {public int x = 0;public int y = 0;//constructorpublic Point(int x, int y) {this.x = x;this.y = y;}}cs this 키워드를 사용해 figure1을 figure2와 같이 변경 할 수 있다.
Using this with a Constuctor
생성자에서 this 키워드를 통해 동일한 객체 내에서의 생성자를 호출 할 수 있다.
123456789101112131415161718public class Rectangle {private int x, y;private int width, height;public Rectangle() {this(0, 0, 1, 1);}public Rectangle(int width, int height) {this(0, 0, width, height);}public Rectangle(int x, int y, int width, int height) {this.x = x;this.y = y;this.width = width;this.height = height;}...}cs References
docs.oracle.com/javase/tutorial/java/javaOO/classdecl.html
docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
docs.oracle.com/javase/tutorial/java/javaOO/methods.html
docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
'자바 스터디' 카테고리의 다른 글
패키지 (0) 2021.01.22 상속 (0) 2021.01.22 연산자 (0) 2021.01.06 자바 데이터 타입, 변수 그리고 배열 (0) 2020.12.31 자바 JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) 2020.12.30