단축키) [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());

}


}

+ Recent posts