근데.. class / instance / object 구분이 되니?
- class : 붕어빵틀, 설계도
- instance : 실제 만들어진 붕어빵. 메모리(heap)에 만들어진 실체
- object : (Class를 포괄하는) Instance..(90%는 인스턴스를 말하지)
메모리라 함은 자바에서는 세영역이지
- heap : new로 만들어진 건 여기로 들어가(new
- stack
- static, class 혹은 static area
>인스턴스만드는데 new가 없다?
new가 없는게 아니라 감춰진 거지. 다른데 있는거야.
ex) cn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "oraclejava", "oraclejava");
getConnection이란 메서드 안에서 Connection을 new해서 리턴해준거야.
이렇게 숨겨놓는 이유는 뭐지?
- Factory Pattern : 어느 한 곳에만 생성하고 싶을 때
- Single turn Pattern : 한번 만들어서 프로그램 전체에서 같이 사용하고 싶을 때
>객체지향 프로그램의 특징
- 정보은폐와 캡슐화
- 상속
- 다형성
연습
클래스 만들어 src/test.oop1/Point2D, src/test.oop1/PointTest (main메서드포함)
public class Point2D { public int x; public int y; }
package test.oop1; public class PointTest { public static void main(String[] args) { Point2D pt = new Point2D(); pt.x = 10; pt.y=20; System.out.println("x= "+ pt.x); System.out.println("y= "+ pt.y); } }
캡슐화(내부를 감추고 기능으로 사용하지)
package test.oop1; public class Point2D { 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; } }
package test.oop1; public class PointTest { public static void main(String[] args) { Point2D pt = new Point2D(); pt.setX(100); pt.setY(200); System.out.println("x= "+ pt.getX()); System.out.println("y= "+ pt.getY()); } }
>Getter Setter 만들기 : alt-shift-s
‘바퀴를 두번 발명하지 마라.’ 재사용.. 상속..
Point3D를 만들어보자.
자바에서 상속은 확장이지. 그냥 가져다 쓰면 의미가 없지. 확장하는데 의미가 있다고.
new wizard : ctrl+n
package test.oop1; public class Point3D extends Point2D{ private int z; public int getZ() { return z; } public void setZ(int z) { this.z = z; } }
package test.oop1; public class PointTest { public static void main(String[] args) { Point3D pt = new Point3D(); pt.setX(100); pt.setY(200); pt.setZ(300); System.out.println("x= "+ pt.getX()); System.out.println("y= "+ pt.getY()); System.out.println("y= "+ pt.getZ()); } }
상속이랑 항상 같이 다니는게 있어. 변이.. 다형성.
package test.oop1; public class Point2D { 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 void print(){ System.out.println("x= "+ this.x); System.out.println("y= "+ this.y); } }
메서드 Override
package test.oop1; public class Point3D extends Point2D{ private int z; public int getZ() { return z; } public void setZ(int z) { this.z = z; } @Override public void print() { // TODO Auto-generated method stub super.print(); System.out.println("z= "+ this.z); } }
package test.oop1; public class PointTest { public static void main(String[] args) { Point3D pt = new Point3D(); pt.setX(100); pt.setY(200); pt.setZ(300); pt.print(); } }