14. 클래스 ( priavte 필드->public get( )/set( ) + 생성자 / Node클래스로 중앙좌표 구하기 ) [ Tutorial14 ]
단축키) [Alt + Shift + S ] : 겟셋터/생성자 자동생성해주는 메뉴를 띄운다(안드로이드의 [alt + insert ]와 동일)
객체지향 프로그래밍에 있어서 가장 기본이 되는 것으로, 가장 대표적으로 많이 사용되는 것이 Node클래스이다. 이는 하나의 장소나 위치를 의미할 수 도 있으며 자료구조에서 말하는 이진 탐색트리의 하나의 서브 트리가 될 수도 있다.
개발프로젝트에서는 종종 Student클래스와 같이 < 하나의 처리할 데이터 단위를 명시> 하는데 사용된다.
클래스는 공장, 객체는 물건이라고 생각하면 좋다. new Car();와 같이 객체를 만드는 과정을 <인스턴스 화>라고 한다.
클래스에서 만들어진, 사용가능한 변수를 <인스턴스>라 한다.
my) 인스턴스 = 객체형 변수
[클래스 구조 정리]
클래스내부에서는 보안관계상 private으로 변수(필드, 멤버변수)들을 선언한다.
외부에서 접근이 바로 안되므로, public getter/setter를 만든다.
기본적으로 외부에서 객체를 만들 때, 초기화하는 생성자도 만든다.
그외 필요한 메소드를 만든다.
[1] 하나의 점을 의미하는 Node 클래스를 생성하자
1. 이번에는 클래스가 2개가 필요하다. 기존에 만든 Main클래스( 메인함수 포함)을 만들고 + Node라는 클래스도 생성한다.
2. Node클래스에서 private 형 변수 2개를 생성한다( 클래스 필드(멤버변수)는 private으로 생성하는 것이 좋다)
*** 보안을 굉장히 중요시 하므로, private 형태로 만들어서, < 클래스 외부에서 함부로 변형이 안되도록 만든다>
public class Node {
private int x;
private int y;
}
3. public int getX() 라는 매쏘드를 만들고, return x를 통해 외부에 x를 반환해준다. (get은 외부에서 꺼내는 반환형 get - return private 필드)
*** [ private 변수 ] 는 자체적으로는 외부에서 접근이 안된다. 대신 [ public 반환형 get 매쏘드 ]를 만들어서 클래스 내부의
private필드 x --> 외부에서 꺼내는 get하도록 반환 해주는 매쏘드다.
public int getX() {
return x;
}
4. public void setX(int x)라는 매쏘드를 만들고, x를 받아서 클래스의 필드인 [ private int x = this.x ] 에다가 값을 set해준다.
(set은 내부에 넣어주는 void set(파라미터) - this.필드 = 파라미터; )
*** [private 변수 ] 에 외부에서 받은 값을 대입해주기 위해서 [public void set (int x) 매쏘드]를 만들어서 외부의 x --> 클래스 내부의 x에 set하도록 입력해주느 매쏘드다.
public void setX(int x) {
this.x = x;
}
5. y도 마찬가지로 복사해서 만들어준다.
6. 이제 생성자를 만들어준다. 이때, this.x, this.y에다가 넘어온 값을 넣어줘야한다.( 생성자는 new 객체 만들 때, 필드 초기화해주는 것)
- 생성자는 메인함수에서 객체(인스턴스)를 만들어줄 때, 직접 클래스필드(멤버변수)에 값을 넣어 초기화해주는 것이다.
public Node(int x, int y) {
this.x = x;
this.y = y;
}
7. 파라미터로 Node객체를 받아서, 초기화된 필드 x,y를 기준으로 <중앙좌표를 계산>한 뒤 new Node( x좌표, y좌표)를 만듬과 동시에 를 반환하는 ,
public Node getCenter(Node other)를 만들어준다.
(1) 자신의 x좌표 [ this.x ] 와 넘어오는 다른 곳의 Node other의 x좌표를 의미하는 [ other.getX() ] 를 더한 뒤 2를 나누어서 중앙 x좌표를 구하고
* other도 Node클래스의 객체이므로, getX()메소드를 사용할 수 있다.
(2) y도 똑같이 구한 다음
(3) new Node( 중앙x, 중앙y); 객체를 생성함과 동시에, 변수에 안넣어주고 바로 return한다.
public Node getCenter(Node other) {
return new Node( (this.x + other.getX())/2 ,(this.y + other.getY() )/2 );
}
my)
****** priavate 변수로 클래스 필드의 보안을 만들고, public 외부에서 꺼내는 get() / 내부에 넣어주는 set() 매쏘드를 만들어서 소통하는구나!
****** 생성자는, 필요한 곳에서 객체를 만들때, 클래스 필드(멤버변수)에 값을 넣어 초기화 해주는 것이다.
****** new Car(); 는 기본생성자를 이용한 것이다. 만약 기본생성자가 없다면,, 생성안된다.(안드로이드는 컴파일시 자동생성 되기도 한다)
[2] Node클래스를 이용하여 두 점 사이의 중점을 구하는 프로그램을 작성해보자.
1. 메인함수에서 생성자를 이용해서, 새로운 객체를 만들자. -> one이라는 객체는 생성자를 통해 priavte 변수(필드)인 x와 y에 10, 20을 가지고 있다.
Node one = new Node(10, 20);
2. two라는 객체를 만들자.
3. 이제 one이라는 node를 기준으로해서 two와의 중앙점을 구하자. getCenter()는 기준Node인 one. getCenter ( 비교할 Node); 로 사용하는 것이다. 그것을 Node result에 넣어주자.
Node one = new Node(10, 20);
Node two = new Node(30, 40);
Node result = one.getCenter(two);
4. result라는 Node객체에서 getX(), getY()를 이용해 좌표들을 출력해보자.
System.out.println("중앙 x : "+ result.getX());
System.out.println("중앙 y : "+ result.getY());
5. 전체코드
[Node.java]
public class Node {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Node(int x, int y) {
this.x = x;
this.y = y;
}
public Node getCenter(Node other) {
return new Node( (this.x + other.getX())/2 ,(this.y + other.getY() )/2 );
}
}
[Main.java]
public class Main {
public static void main(String[] args) {
Node one = new Node(10, 20);
Node two = new Node(30, 40);
Node result = one.getCenter(two);
System.out.println("중앙 x : "+ result.getX() + " 중앙 y : "+ result.getY());
}
}
'Java > 기초 튜토리얼' 카테고리의 다른 글
16. 추상(Abstract) [Tutorial16] (0) | 2018.02.21 |
---|---|
15. 상속과 super - (자식클래스가 부모의 필드까지 이용하기) [Tutorial15] (4) | 2018.02.20 |
13. 다차원 배열 - 2차원 배열 (2차원배열에 랜덤정수 넣고 출력) [ Tutorial 13] (0) | 2018.02.20 |
12. 배열(Array) (입력받은 배열의 최대값/ 100개의 랜덤 정수의 평균) [ Tutorial12 ] (0) | 2018.02.19 |
10~11. 반복함수와 재귀함수(팩토리얼 / 피보나치 수열) ) [프로젝트명 : Tutorial10, 11] (0) | 2018.02.19 |