Wed/Jan/8 [Java] day7. 상속, static

Wed/Jan/8
[Java]
 day7. 상속, static

상속 extends

  • super class; parent class
  • child class ; 파생 class

상속 방법
  • extends keyword 이용해 상속받을 부모 class 지정

상속 특징
  • parent class가 가진 모든 것을 child class가 이어받음
    • 코딩양을 줄일 수 있음
    • 단! private 붙은 것 제외
  • 한번에 하나만 상속 가능
    • 두개 이상 상속 불가
      • ex) public class A {} ; public class B {}; 있을 때
      • public class C extends A {} // 가능
      • public class C extends A, B {} // 불가능
    • 상속의 재상속 가능
      • ex) public class D extends A {};
      • public class E extends D {}; // 가능
  • 다형성과 interface

variables and methods
  • public : 다른 class, package에서 사용가능
  • private : 해당 class 안에서만 사용
  • 없는 경우 : 해당 package안에서 사용가능
1
2
3
4
5
6
7
8
9
10
// MainClass에서 다른 class 객체 형성
ParentClass pc = new ParentClass();
// parentClass variables, method 사용가능, public variables 사용가능, private variables 제외
ChildClass cc = new ChildClass();
// parentClass variables, method  사용가능, public variables 사용가능, private variables 제외
OtherClass oc = new OtherClass(); // 다른 package에 있는 class
// parentClass method, public variables 사용가능, 일반 variables는 같은 package 안에서만 사용 가능
cs

상속의 접근제한자
 : 외부로부터 클래스 자신을 보호하기 위해 접근을 제한하는 것

★ 접근제한자 종류 ★ (반드시 알아둘 것)
  • public : 어디서나 모두 허용
  • protected : 상속되는 자식class까지만 허용, package 달라도 상속되면 허용
  • default : 동일 package 내에서만 허용
  • private : 해당 class 내에서만 허용
접근제한자 사용
declare to classes, methods, operators, variables
단, class 선언시 private은 사용불가!

* Java Web에서 상속은 필수 개념! (시작부터 상속 관련 내용 등장)

1
2
super();        // 가장 먼저 해야 할 것! class 맨 첫줄에 써야함, call ParentClass operator method
super(250);     // parentClass operator 가 값을 받을 수 있는 경우 
cs


< method declaration >
Overloading
  • 동일한 method 이름 이용해, 다양한 data 처리할 경우
  • 조건 : 매개변수의 갯수가 다르거나, 동일 갯수일 경우 data type 달라야
1
2
3
4
5
6
7
8
9
10
11
public void test() {                //가능
}
public void test(int a) {            //가능
}
public void test(String a) {        //가능
}
public void test(int a, int b) {    //가능
}
public void test(int n) {            // 불가능
}
cs

Override
  • 부모로부터 "상속받은" method, 자식 class에서 수정 가능
  • childClass는 parentClass method의 {}내부만 수정가능
  • method 선언부를 수정하면, child class가 선언한 method로 변경
1
2
3
4
public void parentMethod(){
    int s = 100;
    System.out.println("inside of OtherClass parentMethod" + 100); 
}
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// superclass A의 method 내부 변경
public class B extends A{
    public B() {}
    public void test(){
        int a = 10+30+50
        System.out.println(a);
    }
}
// superclass A의 method 선언부 변경 (return type )
// 이러면 C class 선언 method가 됨
public class C extends A{
    public C(){}
    public int test(){
        return 100;
    }
}
// superclass A의 method 선언부 변경 (parameter 추가)
// 이러면 D class 선언 method가 됨
public class D extends A{
    public D(){}
    public void test (ind n){
        System.out.printnln(n)
    }
}
cs


상속의 활용
  • 프랜차이즈 상품별 매출 변수 : 전체 동일한 품목 - 상속, 지점별 별도로 판매하는 품목 - 별도 생성

Class 종류 (다시 정리)
  • Main Class
    • public static void main (String[] args){} 포함
    • mian() method : 프로젝트의 주 thread로 사용됨, process 개념
  • 일반 Class
    • public static void main (String[] args){} 포함하지 않는 class,
    • 생성자는 필요함
  • 파생 class
    • super class에 의해 선언된 class
    • parent class 상송받는 child class
  • 추상 class
    • abstract keyword 이용해 선언
    • public abstract class Test {}
  • interface class
    • interface keyword 이용해 선언
    • public interface Test {}
* 추상, interface는 Java Web Spring에서 많이 쓰임,

* Class를 여러개 만들때, 항상 짧은 거부터 만들어야, 긴거부터 하면 짧은거 못만듦
  ex) com.kkk.phone >> com.kkk.phone.machine

Getter method
보안 필요한 private 변수들을 다시 꺼내와야 하는 경우
 > public method 생성해서 return
1
2
3
4
5
private String phoneNumber = "";
public String getPhoneNumber() { // Getter method
    return this.phoneNumber;
}
cs

1
2
3
4
5
6
7
8
9
// getter method
public String getName() {
    return name;
}
// setter method
public void setName(String name) {
    this.name = name;
}
cs

eclipse로 편하게 만들자

* 주민번호 - private 변수선언, getter/setter 모두 안만듦
* 사원번호 - private 변수선언, getter 는 만들고 setter는 안만듦


< static >
static이 붙은 method, variables는 static 붙지 않은 곳에서 선언한 method, variable 호출 불가
 > 저장되는 위치가 다르다!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int a = 10;
static int b = 100;
public static void main(String[] args) {
    System.out.println(a);        // error
    test();                       // error
    System.out.println(b);
    testb();
}
public void test() {
    System.out.println(a);
}
public static void testb() {
    System.out.println(b);
}
cs

> 메모리의 영역
  • class 저장되는 memory, static method/variables도 저장
  • object 저장되는 memory, 일반적인 method/variables
  • 두 memory간 상호 호출 불가능, 아예 구분되어 있음
static에서 변수선언하게 되면,
  • className.varName 이런식으로 바로 호출해서 대입 가능함
    • (아주 유용하든지, 독이 되든지)
    • 1
      2
      3
      4
      public class DataClass{
          public static int a = 10;}
      DataClass.a = 1000;
      cs
  • 각 object 가 공유할 값으로 사용
    • 모든 object에 동일한 값 적용하는 경우, 한 class에서 임의로 정하면 다른 class에서도 모두 바뀜
    • 모든 상품에 동일한 할인률 적용
    • Math.PI, Math.random, Math.round, Math.floor,...
      • Math Class 안에 static double 로 정의
      • Math Class 안의 수학 관련 variables, methods, 상수 대부분 static으로 정의
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class A {
        public static int n1 = 0;
        public int n2 = 5;
    }
    // 다른 class에서 A type 변수 선언할 때, n1의 값도 함께 선언됨
    A a1 = new A();
        a1.n2 = 15// 가능
        
    // n1의 경우, a1 선언 하지 않고서 바로 선언 가능 
    A.n1 = 1000// 가능
    cs
1
2
3
4
5
6
7
8
public class DataClass {
    static ArrayList<String> str = new ArrayList<String>();
    public DataClass(){
        str.add("abc"); ....}
System.out.println(DataClass.str.size());  // 0
DataClass dc = new DataClass();
System.out.println(DataClass.str.size());  // 개수 출력, 개체 형성해야 
cs

1
2
3
4
5
// OperClass에서 static variable 선언
static double PI = 3.14195
// MainClass에서 바로 호출
System.out.println(OperClass.PI); // 3.14195
cs
1
2
3
4
5
6
7
8
// OperClass에서 static method 선언
static void sum() {
    System.out.println("합구하기");
}
// MainClass에서 바로 호출
OperClass.sum(); // 합구하기
cs

Math Class 의 methods

1
2
3
4
double pi = Math.PI;    // Math.PI == 3.141592653589793
    System.out.println(Math.floor(pi));        // 내림
    System.out.println(Math.ceil(pi));         // 올림★
    System.out.println(Math.round(pi));        // 반올림
cs

Math.ceil(); // page 수 구하는 방법에 사용되므로 꼭 알아둘 것 ★

1
2
3
4
5
6
7
8
// 반올림 하고, 소수점 위치 바꾸기
double d=45.3566;
d=d*100;
    System.out.println(d);  // 4535.66
d=Math.round(d);
    System.out.println(d);    // 4536.0
= d/100;
    System.out.println(d);    // 45.36
cs

1
2
3
4
5
Math.atan2();    // 회전각 구하기 할 때 아주 많이 쓰임
Math.max(a, b);    // 큰 값
Math.min(a, b);    // 작은 값
Math.sqrt();    // root
Math.pow(a, b); // 
cs


<문제>
이마트 전체 매출 출력




<End>

댓글

가장 많이 본 글