* 의존관계
- has a ->Attribute    ex :  자동차 - 엔진         
                                                     - 타이어
   ->aggregation 부엌 - 냉장고(부엌이 만들어 질때 부품들이 채워져 있지 않고 나중에 조금씩 채운다. (life cycle이 같지 않아도 된다.)
   ->composition - 생성될 때 다 같이 생성되야 한다.(부엌이 만들어 질때 부품들이 채워져 있어야한다.)(life cycle이 같아야 한다.)
        
- use a ->메소드 -사용하고 나면 없어지는것.

 

* has a 관계 ( 의존 관계 )
ex :

package dependency;

public class AddressDTO {
 private String zipCode;
 private String addressDetail;
 public AddressDTO() {
 }

 public AddressDTO(String zipCode, String addressDetail) {
  this.zipCode = zipCode;
  this.addressDetail = addressDetail;
 }
 public String getZipCode() {
  return zipCode;
 }
 public void setZipCode(String zipCode) {
  this.zipCode = zipCode;
 }
 public String getAddressDetail() {
  return addressDetail;
 }
 public void setAddressDetail(String addressDetail) {
  this.addressDetail = addressDetail;
 }
 @Override
 public String toString() {
  return "AddressDTO [zipCode=" + zipCode + ", addressDetail="
    + addressDetail + "]";
 }
 
}


------------------


package dependency;

public class SchoolDTO {
 private String schoolId;
 private String schoolName;
 private String schoolTelNo;
 private int enrolment;
 private AddressDTO addressTo;
 

 public SchoolDTO() {}
 public SchoolDTO(String schoolId, String schoolName, String schoolTelNo,
   int enrolment, AddressDTO addressTo) {
  this.schoolId = schoolId;
  this.schoolName = schoolName;
  this.schoolTelNo = schoolTelNo;
  this.enrolment = enrolment;
  this.addressTo = addressTo;
 }
 public String getSchoolId() {
  return schoolId;
 }
 public void setSchoolId(String schoolId) {
  this.schoolId = schoolId;
 }
 public String getSchoolName() {
  return schoolName;
 }
 public void setSchoolName(String schoolName) {
  this.schoolName = schoolName;
 }
 public String getSchoolTelNo() {
  return schoolTelNo;
 }
 public void setSchoolTelNo(String schoolTelNo) {
  this.schoolTelNo = schoolTelNo;
 }
 public int getEnrolment() {
  return enrolment;
 }
 public void setEnrolment(int enrolment) {
  this.enrolment = enrolment;
 }
 public AddressDTO getAddressTo() {
  return addressTo;
 }
 public void setAddressTo(AddressDTO addressTo) {
  this.addressTo = addressTo;
 }
 @Override
 public String toString() {
  return "SchoolDTO [schoolId=" + schoolId + ", schoolName=" + schoolName
    + ", schoolTelNo=" + schoolTelNo + ", enrolment=" + enrolment
    + ", addressTo=" + addressTo + "]";
 }
 
}

 

---------------------------

 

package dependency;

public class StudentDTO {
 private String studentId;
 private String studentName;
 private int studentAge;
 private int studentGrade;
 private int studentClazz;
 private int studentNumber;
 private SchoolDTO schoolTo;

 public StudentDTO(SchoolDTO schoolTo) {
  this.schoolTo = schoolTo;
 }
 
 public StudentDTO(String studentId, String studentName, SchoolDTO schoolTo) {
  this.studentId = studentId;
  this.studentName = studentName;
  this.schoolTo = schoolTo;
 }

 public StudentDTO(String studentId, String studentName, int studentAge,
   int studentGrade, int studentClazz, int studentNumber,
   SchoolDTO schoolTol) {
  this.studentId = studentId;
  this.studentName = studentName;
  this.studentAge = studentAge;
  this.studentGrade = studentGrade;
  this.studentClazz = studentClazz;
  this.studentNumber = studentNumber;
  this.schoolTo = schoolTol;
 }
 public String getStudentId() {
  return studentId;
 }
 public void setStudentId(String studentId) {
  this.studentId = studentId;
 }
 public String getStudentName() {
  return studentName;
 }
 public void setStudentName(String studentName) {
  this.studentName = studentName;
 }
 public int getStudentAge() {
  return studentAge;
 }
 public void setStudentAge(int studentAge) {
  this.studentAge = studentAge;
 }
 public int getStudentGrade() {
  return studentGrade;
 }
 public void setStudentGrade(int studentGrade) {
  this.studentGrade = studentGrade;
 }
 public int getStudentClazz() {
  return studentClazz;
 }
 public void setStudentClazz(int studentClazz) {
  this.studentClazz = studentClazz;
 }
 public int getStudentNumber() {
  return studentNumber;
 }
 public void setStudentNumber(int studentNumber) {
  this.studentNumber = studentNumber;
 }
 public SchoolDTO getSchoolTol() {
  return schoolTo;
 }
 public void setSchoolTol(SchoolDTO schoolTol) {
  this.schoolTo = schoolTol;
 }
 @Override
 public String toString() {
  return "StudentDTO [studentId=" + studentId + ", studentName="
    + studentName + ", studentAge=" + studentAge
    + ", studentGrade=" + studentGrade + ", studentClazz="
    + studentClazz + ", studentNumber=" + studentNumber
    + ", schoolTo=" + schoolTo + "]";
 }
 
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

다형성 - 실습  (0) 2012.07.28
다형성(polymorephism)  (0) 2012.07.28
final변수  (0) 2012.07.28
this, super키워드  (0) 2012.07.28
상속, 생성자  (0) 2012.07.28
Posted by 조은성
,

* final : 변수, 메소드(instance 메소드), class

- 변경이 안된다. (더이상 바꿀 수 없다.)
- 메소드 :  하위 class에서 overriding 할 수 없다.
- class : 하위 class를 가질 수 없는 class.    
(대표 : String class, 선언 -> 한번 값이 대입되면 다시는 대입안됨.
ex :  final int i = 10; i는 프로그램이 끝날때까지 값을 바꿀 수 없고 10만을 갖는다.

변수 :  변수의 상수화-> 한번 값이 대입되면 다시는 대입안됨.
instance변수 : 묵시적 초기화(x)
->값 대입 :  명시적 대입 (명시적 초기화)
->생성자에서 대입

final 변수은 한번 생성해주고 변수를 바꿀 수 없으므로 static과 잘어울린다.

- static 변수 : 선언시 값 대입.
   ->구문 : public static final
class A{
 static final int i =10;
 }

- 지역변수 :  사용 전까지 대입.
public void go(){
 final int i;
 i = 10; (이렇게 사용전에는 대입을 해줘야 하고, 한번 대입되면 값이 바뀔 수 없다. )
 System.out.prinltl(i);
 }

* final변수의 이름 관례 : 대문자
   단어 + 단어 -> 단어_단어

* final class는 상속이 안된다.

project : day16
package : finaltest.clazz
class : SuperClass
    SubClass

package finaltest.clazz;

public final class SuperClass {

}

-----------------

package finaltest.clazz;

public class SubClass extends SuperClass{

}

--------------------

project : day16
package : finaltest.method
class : SuperClass
    SubClass

* final 이 붙은 메소드는 하위 class에서 오버라이드 할 수 없다.

package finaltest.method;

public class SuperClass {
 public final void methodB(){
   System.out.println("안녕하세요");
 }
}
---------------------

package finaltest.method;

public class SubClass extends SuperClass{
 
 @Override
 public void methodB(){
  System.out.println("SubClass 안녕하세요");
}
}

----------------------

project : day16
package : finaltest.var
class : Rectangle

package finaltest.var;

public class Rectangle {
 public static final double PI = 3.14;
 public static final int BLACK = 0;
 public static final int WHITE = 1;
 public static final int BLUE; //여기서 에러가 난다. static final 변수는 선언을 하면서 반드시 값을 대입 해줘야한다.
}
-------------------------------------------

package finaltest.var;

public class Rectangle {
 public static final double PI = 3.14;
 public static final int BLACK = 0;
 public static final int WHITE = 1;
 //public static final int BLUE; //여기서 에러가 난다. static final 변수는 선언을 하면서 반드시 값을 대입 해줘야한다.
 private final int WIDTH;          //final instance변수는 선언시 대입하거나 생성자에서 값을 대입해야한다.  처음 초기화하면 생성자에서 또 다시 값을 넣을 수 없다.
 public Rectangle(int width){
  this.WIDTH = width;
 }

}

-------------------------------------

* 값이 대입되지 않은 로컬 변수는 사용할 수 없다.

package finaltest.var;

public class Rectangle {
 public static final double PI = 3.14;
 public static final int BLACK = 0;
 public static final int WHITE = 1;
 //public static final int BLUE; //여기서 에러가 난다. static final 변수는 선언을 하면서 반드시 값을 대입 해줘야한다.
 private final int WIDTH;
 public Rectangle(int width){
  this.WIDTH = width;
 }
 public void rectMethod(){
  final int var;
  
  //var = 20;
  //var = 10; //단 값은 한번만 넣어야 한다.

  System.out.println(var);
 }
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

다형성(polymorephism)  (0) 2012.07.28
의존관계(dependency)  (0) 2012.07.28
this, super키워드  (0) 2012.07.28
상속, 생성자  (0) 2012.07.28
싱글턴 패턴  (0) 2012.07.28
Posted by 조은성
,

* super
1. 부모의 생성자 호출 시 사용(중요함, )
-생성자는 class와 이름이 같아야 하므로 부모class의 생성자는 상속이 안된다.
단, 자식 class의 생성자에서 부모의 생성자 호출은 가능.
- super([argument, ...]);
->생성자 구현부의 첫 명령어로 와야한다. (this도 생성자 구현부의 첫 명령어로 와야함으로 this와 super는 함께 쓸수 없다. )
->생성자 구현부에 this()나 super() 코드가 없으면 super();<-부모의 no-argument 생성자 호출 하는 코드가 자동으로 들어간다.
2. 부모의 객체를 참조하는 변수(중요도가 약간 떨어짐)

* this
1. overloading 된 생성자 호출(몰라도 프로그램 짜는데 이상이 없음, 프로그램 코딩을 다해주면됨. 코드 라인을 줄여주는 역할)
->생성자 구현부의 첫 명령어로 와야한다.
2.현재 일하는 메소드의 객체 - local

* 메소드 overriding(메소드 재정의) :  하위 class에서 부모 class에 정의된 메소드의 구현을 재정의 하는것. (자기만의 특징을 넣어서 다시 구현하고 싶을 때 메소드를 다시 정의하는 것.)
- 규칙 : 부모 안에 있는 메소드를 자식에서 똑같이 만들어서 내용만 바꾸는 것이다.
             전제 :  상속관계
      1. 이름, return type, 매개변수가 같아야 한다.
      2. 접근 제한자의 범위가 부모와 같거나 더 넓어야 한다. (만약 접근제한자의 범위가 부모가 protected면 자식은 protected나 public 이어야 한다.만약 접근제한자의 범위가 부모가 public이면 자식은 public이어야한다.단, 부모가 private면 상속해서 받아 올 수 없기때문에 오버라이딩이 아니다.)
* 메소드 overloading - 다른 메소드인데 인자와 타입이 다르면 한 클레스 내에서 사용 가능한 것.

*exception 관련 규칙.


* 2012-3-14

- 상속 :
부모클래스 :  자식클래스의 공통적인 내용을 추려서 새로 만들어진 클래스
(추상적이다.)

* super - 생성자호출 -> 부모의 생성자를 부름
             - 객체의 참조변수
      - 생성자 구현 첫 명령에 와야 한다.
      - 하위 class의 객체에서 부모 class의 객체를 참조하는 참조변수.
      - overriding한 메소드에서 부모에 정의된 원본메소드 호출시 사용.
      사용 : super.부모의 member-변수나, 메소드

          public
넓다       |
          protected
              |
좁다   private

*
Project : day16
package : overriding.test
class : Superclass
    SubClass

package overriding.test;

public class SuperClass {
 

 public void methodA(int i){
  System.out.println("SuperClass.methodA() : "+i);
 }
}


----------------------


package overriding.test;

public class SubClass extends SuperClass {
 /*
 //overriding - return type이 틀림
 public int methodA(int i){
  System.out.println("SubClass.methodA(int) : "+i);
 }
 //overriding = 접근제한자가 부모보다 좁아서 틀림.
 protected void methodA(int i){
  System.out.println("SubClass.methodA(int) :"+i);
 }
 */
 //overriding = 정상
 public void methodA(int i){
  System.out.println("SubClass.methodA(int) :"+i);
 }
 
 //overloading
 public void methodA(){
  System.out.println("SubClass.methodA()");
 }
 //overloading
 public void methodA(String str){
  System.out.println("SubClass.methodA(String) : "+str);
 }
 public static void main(String[] args) {
  SubClass sc  = new SubClass();
  sc.methodA(10);
 }
}


------------------------------

* 도형 예제

package : overriding.figure
TestShape - main()
Rectangle -width, height
Circle - radius, PI
Triangle - width, height

Shape - public void calculate Area(){}


ex :

package overriding.test;

import overriding.figure.Circle;
import overriding.figure.Rectangle;
import overriding.figure.Triangle;

public class TestShape {

 public static void main(String[] args) {
  Circle c = new Circle(3);
  c.calculateArea();
  
  Rectangle r = new Rectangle(10,20);
  r.calculateArea();
  
  Triangle t = new Triangle(10,20);
   t.calculateArea();

 }

}

----------------------

package overriding.figure;

public class Shape {
 public void calculateArea(){}
}

-----------------------

package overriding.figure;

public class Rectangle extends Shape{
 private double width;
 private double height;
 
 public Rectangle(double width, double height) {
  this.width = width;
  this.height = height;
 }

 public void calculateArea(){
  System.out.println(" 사각형의 넓이는 : "+width*height);
 }

 
}

-------------------------

package overriding.figure;

public class Circle extends Shape{
 private double radius;
 
 public Circle(double radius) {
  this.radius = radius;
 }

 public void calculateArea(){
  
  System.out.println(" 원의 넓이는 : "+radius*radius*Math.PI);
 }
 
}


------------------------------

package overriding.figure;

public class Triangle extends Shape{
 private double width;
 private double height;
 public Triangle(double width,double height){
  this.width = width;
  this.height = height;
 }
 public void calculateArea(){
  
  System.out.println(" 삼각형의 넓이는 : "+width*height/2);
 }

 
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

의존관계(dependency)  (0) 2012.07.28
final변수  (0) 2012.07.28
상속, 생성자  (0) 2012.07.28
싱글턴 패턴  (0) 2012.07.28
static 예  (0) 2012.07.28
Posted by 조은성
,