상속 목적

1. 상위 클래스가 여러 하위 클래스들의 공통된 데이터를 추출해서 관리하도록 만든다.
2. 상위 클래스 전반적인 자료형을 대표하면서 외부에 공통된 인터페이스를 제공하고, 하위 클래스들은 각기 다른 구현 내용을 가지도록 만들어 준다.


자바에서 final사용이란?


1. class 의 final 사용.
class 가 상속되지 않도록 하기 위하여 선언합니다.

예)
final class SampleClass {
}

2. method 의 final 선언
상속 관계에 있는 상위 class 와 하위 class 에서 상위 class 에 있는 method 가 재정의(overriding) 되지 않도록 하기 위하여 정의 합니다.

예)
calss SampleClass {
    public final sampleMethod() {
    }
}

3. variable(변수) 의 final 선언
초기 값이 변경되면 안되거나 변경할 경우 예외가 발생할수 있는 경우 사용하며, 문서화의 한 형태로 가독성을 높이고 수정이 용이 하다는 이점이 있습니다.

final int sampleVariable = 1;
final String sampleVariable = "aaa";
등등

'취업아카데미-JAVA' 카테고리의 다른 글

15. 클래스상속 오버라이딩  (0) 2015.06.28
14. 클래스상속  (0) 2015.06.28
13. 배열  (0) 2015.06.28
12. 콘솔 입력과 출력  (0) 2015.06.28
11. 메소드 오버로딩과 String 클래스  (0) 2015.06.28
블로그 이미지

왕왕왕왕

,

package king;


public class test {


public static void main(String[] args) {

wang w = new wang();

w.p();

}

}


class king {


public void p() {

super(); 기본으로 명시되어있음

System.out.println("부모클래스!");

}


}


class wang extends king {

@Override

public void p() {

// TODO 자동 생성된 메소드 스텁

System.out.println("자식클래스에서 재정의");

}

}


오버라이딩이란


부모클래스에 있는 메소드를 새로 재정의해서 재사용성을 높이는 것이다.


king클래스에는 부모클래스라는 출력을 한다.


하지만, 상속받은 자식클래스에서 자식클래스에서 재정의라는 문구를 새로 정의해서 


부모클래스출력대신 자식클래스 정의된 내용이 출력된다.




  상속시 부모의 생성자 함수가 먼저 수행되고 자식의 생성자가 수행된다.

  자바는 클래스끼리 절대로 다중상속을 제공하지 않는다.

  오직 클래스는 단일 상속만 가능하다.(명확성을 높이기 위해서)

 

  오버라이딩: 부모의 멤버를 똑같이 재정의

  자식의 멤버의 우선순위가 된다.


수퍼

 

super: 부모의 멤버를 명시적으로 접근하고 싶을때 사용

super(): 부모의 생성자를 호출, 항상 상속시 자식의 생성자의 첫번째 라인에 존재한다. (디폴트)


디스

this : 클래스내에서 내 자신의 객체를 레퍼런스하는 변수

  객체를 구별하는 역할

  명시적으로 선언을 할수 없고 사용만 가능하다.


this() : 자신의 또다른 생성자를 호출할때 사용


 

'취업아카데미-JAVA' 카테고리의 다른 글

16. 클래스의 상속 목적 & final  (0) 2015.06.28
14. 클래스상속  (0) 2015.06.28
13. 배열  (0) 2015.06.28
12. 콘솔 입력과 출력  (0) 2015.06.28
11. 메소드 오버로딩과 String 클래스  (0) 2015.06.28
블로그 이미지

왕왕왕왕

,

package king;


public class test {


public static void main(String[] args) {

wang w = new wang();

w.input(30);

System.out.println(w.integer());

}

}


class king {

int s;


public void input(int a) {

s += a;

}


}


class wang extends king {

public int integer() {

return s;

}


}


간단한 예제이다


king이라는 부모클래스에 input메소드가있다 정수를 받고 s변수에 누적한다.


wang이라는 클래스가 king클래스를 상속받고 integer메소드에서 king클래스에 s변수의 값을 리턴한다.


test클래스에서 자식클래스인 wang만을 선언하고 부모클래스에 모든 메소드를 사용할 수있다.

정수 30을 넣어주고 integer메소드를 실행하면 30이 찍힌다.


이같은 원리로 상속을 이용하면 되겠다. 

'취업아카데미-JAVA' 카테고리의 다른 글

16. 클래스의 상속 목적 & final  (0) 2015.06.28
15. 클래스상속 오버라이딩  (0) 2015.06.28
13. 배열  (0) 2015.06.28
12. 콘솔 입력과 출력  (0) 2015.06.28
11. 메소드 오버로딩과 String 클래스  (0) 2015.06.28
블로그 이미지

왕왕왕왕

,

13. 배열

취업아카데미-JAVA 2015. 6. 28. 16:33

배열이란 자료형의 종류가 아닌 자료형의 집합을 의미한다.


String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};

for (int i=0; i<weeks.length; i++) {

    System.out.println(weeks[i]);

}


배열은 인덱스가 0부터 시작한다.


배열의 이름에 length를 이용하면 해당 배열의 전체 크기를 반환한다.


이방법으로 쉽게 입력하고 출력이 가능하다.


역시 더 필요하다면 자바 카테고리이용하겠다.



블로그 이미지

왕왕왕왕

,

콘솔입력은 스캐너클래스로 쉽게 구현가능


import java.util.Scanner;


public class Test {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.println(sc.next());

    }

}


콘솔출력은 system.out으로 구현가능


System.out.println("hello world");


io에 관련된 자세한 내용은 자바카테고리에서 다룰것이다. 여기는 개념정도만

블로그 이미지

왕왕왕왕

,

오버로딩


오버로딩(Overloading)은 메소드 오버로딩과 생성자 오버로딩이 있다. 하지만 둘다 같은 개념이다.


같은 이름의 함수를 여러 개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답하게 한다.


public class Main { // Overroding 예제 // 같은 기능을 하는 것끼리 묶을때 public static void main(String[] args) { // TODO Auto-generated method stub Main m = new Main(); Main m1 = new Main(1); Main m2 = new Main('A'); Main m3 = new Main(1, 2); Main m4 = new Main("king"); } Main() { System.out.println("빈거"); } Main(int a) { System.out.println(a); } Main(char a) { System.out.println(a); } Main(int a, int b) { System.out.println(a + "" + b); } Main(String a) { System.out.println(a); } }



오버라이딩


상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 메소드도 하위 클래스로 상속되어 하위 클래스에서 사용할 수 있다. 하지만, 하위 클래스에서 메소드를 재정의해서 사용할 수 있다.


상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기술을 오버라이딩(Overriding) 이라고 한다.


public class test {


public static void main(String[] args) {

wang w = new wang();

king k = new king();

//부모클래스 출력

k.p();

//자식클래스에서 재정의 출력

w.p();

}

}


class king {


protected void p() {

System.out.println("부모클래스!");

}


}


class wang extends king {

@Override

public void p() {

// TODO 자동 생성된 메소드 스텁

System.out.println("자식클래스에서 재정의");

}

}



String 클래스


1. substring

한 문자열에서 내용의 일부를 추출하는 메서드

주어진 시작위치(begin)부터 끝 위치(end) 범위에 포함된 문자열을 얻는다.

 

String s = "java.lang.Object";

String c = s.substring(10);          c = "Object"

String p = s.substring(5,9);         p = "lang"



2.split

문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환 한다.


String animals = "dog, cat, bear";

String[] arr = animals.split(",")


결과

arr[0] = "dog"

arr[1] = "cat"

arr[2] = "bear"

 


3. contains

지정된 문자열(s)이 포함되었는지 검사 한다.


String s = "abcedfg";

boolean b = s.contains("bc");


결과

b = true

 


4. endsWith

지정된 문자열(suffix)로 끝나는지 검사 한다.


String file = "Hello.txt";

boolean b = file.endsWith("txt");


결과

b = true  



5. equals

매개변수로 받은 문자열(obj)과 String인스턴스의 문자열을 비교한다. obj가 String이 아니거나 문자열이 다르면 false를 반환한다. String 클래스는 equals 메소드를 오버라이드 해서 사용한다.


String s = "Hello";

boolean b = s.equals("Hello");

boolean b2 = s.equals("hello");


결과

b = true

b2 = false

  


6.replace

문자열 중의 문자열(old)을 새로운 문자열(nw)로 모두 바꾼 문자열을 반환 한다.


String s = "Hellollo";

String sl = s.replace("ll","LL"));


결과

sl = "HeLLoLLo"



7.toString

String toString()

String 인스턴스에 저장되어 있는 문자열을 반환 한다.


String s = "Hello";

String sl = s.toString();


결과

sl = "Hello"



8. toLowerCase

String 인스턴스에 저장되어있는 모든 문자열을 소문자로 변환하여 반환 한다.


String s = "Hello";

String sl = s.toLowerCase();


결과

sl = "Hello"



9. toUpperCase

String 인스턴스에 저장되어있는 모든 문자열을 대문자로 변환하여 반환 한다. 


String s = "Hello";

String sl = s.toUpperCase(); 


결과

sl = "HELLO"



10. trim

문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백을 없앤 결과를 반환한다. 이 때 문자열 중간에 있는 공백은 제거되지 않는다.


String s = "     Hello World   ";

String sl = s.trim();


결과

sl = "Hello World"



11. valueOf

지정된 값을 문자열로 변환하여 반환 한다.

참조변수의 경우, toString()을 호출한 결과를 반환 한다.


String b = String.valueOf(true);

String c = String.valueOf('a'); 

String i = String.valueOf(100); 

String l = String.valueOf(100L); 

String f = String.valueOf(10f); 

String d = String.valueOf(10.0);

java.util.Date dd = new java.util.Date();

String date = String.valueOf(dd);


결과

b = "true"

c = "a"

i = "100"

l = "100"

f = "10.0"

d = "10.0"

date = "Sub Jan 27:21:26:29 KST 2008"

  

블로그 이미지

왕왕왕왕

,

static 변수(즉 정적변수)란  

- Class 당 하나만 생성되는 변수, 객체(인스턴스)를 아무리 많이 만들더라도 변수는 하나만 존재 

- 객체가 생성될 때마다 새롭게 생성되는 멤버 변수와는 달리 초기에 한번만 생성되고 공유하여 사용가능 

 

static 변수 생성 시기 : Class 이름이 언급되어 질때 생성 (new 뿐만 아니라 Class 명만 나와도 생성됨)

static 변수 사용 방법 : 클래스명.변수명 OR 객체.변수명모두 가능 

   예) 1. StaticSample aa = new StaticSample();  

            System.out.println(aa.sTotal) 

         2. System.out.println(StaticSample.sTotal);

static 변수 초기화 방법 

    1) static 변수 는 초기 생성시 초기화 

        public static int sTotal=0;

    2)  static 변수 는 초기 생성시 초기화. 최초 1회만 호출됨. 

        public static int sTotal=0; 

        public int nTotal=0; 

        static { 

            sTotal += 10; 

            //nTotal += 10; //Static initializer 사용시 사용할 수 없다는 메시지 발생 

        } 

    3) 참고 static initializer 에서 staic 을 빼면 생성자와 같은 역할을 함. 즉 객체 생성시 마다 호출됨. 

        public static int sTotal=0; 

        public int nTotal=0;  

        {                 

            sTotal += 10; 

            nTotal += 10; //Static initializer 사용시 사용할 수 없다는 메시지 발생 

        }


static method / function (정적 함수)

    1) 함수 앞에 static 을 붙이면 정적함수가 됨.

       -> 즉 Instance 생성 없이 그 함수를 직접 호출할 수 있음.

    예) public static void main (String[] args) {}

       -> main 함수도 최초 호출되기 위해서는 static 으로 선언되어 있어야 함.

블로그 이미지

왕왕왕왕

,

자바에는 다음과 같은 접근 제어자가 있다.

쓰이는 용도

  1. private  (필드)
  2. default (알아서)
  3. protected (알아서)
  4. public  (메소드)

private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다



접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다.


접근제어자를 별도로 설정하지 않는다면 접근제어자가 없는 변수, 

메소드는 default 접근제어자가 되어 해당 패키지 내에서만 접근이 가능하다.


접근제어자가 protected로 설정되었다면 protected가 붙은 변수,

메소드는 동일 패키지내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근이 가능하다.


접근제어자가 public으로 설정되었다면 public 접근제어자가 붙은 변수, 

메소드는 어떤 클래스에서라도 접근이 가능하다.




캡슐화



public class StopWatch {


    private long startTime;

    private long stopTime;


    public void start() {

        startTime = System.currentTimeMillis();

    }


    public void stop() {

        stopTime = System.currentTimeMillis();

    }


    public Time getElapsedTime() {

        return new Time(stopTime - startTime);

    }

}

스탑워치클래스를 만들자면 이런식으로 하면 캡슐화한다고 한다.


객체지향적 프로그래밍을 습관화해야한다.



//field

private int num1;

private int num2;

private int op;

private int result;


//constructor 는 private로 사용하면 다른클래스에서 사용할수없기때문에 

//싱글톤 패턴이라는 기법을 사용하면

//private로 해놔도 사용할 수 있는 방법을 제공함





블로그 이미지

왕왕왕왕

,