반응형

상속이란 ?

 

자식 클래스는 부모 클래스에서 정의된 변수나 메소드를 자기 자신 것처럼 사용할 수 있다.

 

상속 형태

class 부모클래스명 {

        변수;

        메소드;

}

 

clasee 자식클래스명 extends 부모클래스명 {

        실행할 문장; 

}

 

오버라이딩

- 부모로부터 상속받은 메소드를 자식 클래스에서 자기 자신 클래스의 기능에 맞도록 재정의하는 기능

 

바로 예시로 들어가보겠습니다

동일 패키지에 존재한다는 가정하에 클래스 파일을 분리해서 만들었습니다.

 

부모클래스

GrandF.java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class GrandF {
 
    public String name = "홍길동할아버지";
    protected String gahun = "열심히하자";
 
    public GrandF() {
        System.out.println("할아버지 생성자입니다");
    }
 
    public void say() {
        System.out.println("할아버지가 말씀하셨다.");
    }
 
}
 
 

3-4번 줄 : name과 gahun이라는 변수명과 변수 값을 정해줍니다.

6-7번 줄 : 생성자를 한번 더 복습해보았습니다.

10-11번 줄 : say라는 메소드를 생성해주었습니다.

 

자식클래스

gajok.java

 

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
27
28
29
30
31
32
33
34
public class Fatherr extends GrandF {
 
    public String gabo = "지역변수"// 은닉화
 
    public Fatherr() {
        super(); // 부모 생성자 호출. 아규먼트에의해 선택적으로 호출
     
    }
 
    @Override
    public void say() {
        // TODO Auto-generated method stub
        System.out.println("자바 공부를 합시다");
    }
 
    public void showData() {
 
        String gabo = "멤버변수";
 
        System.out.println("gabo : " + gabo); // 멤버변수
        System.out.println("gabo : " + this.gabo); // 지역변수
        System.out.println("gabo : " + super.name);
 
    }
 
    public static void main(String[] args) {
        Fatherr fa1 = new Fatherr();
        fa1.say();
        fa1.showData();
 
    }
 
}
 
 

5번 줄 : GrandF 클래스를 gr이라는 새로운 객체로 생성해준다.

6번 줄 : super()는 부모 클래스의 생성자를 호출하기때문에 "할아버지 생성자"를 호출합니다.

10번 줄 : 기존  부모클래스에서 "할아버지가 말씀하셨다"를 호출해야하지만 자식클래스에서 상속을 받았기 때문에 "자바 공부를 합시다"가 출력됩니다.

16번 줄 : 변수별로 어떤 차이점을 가지는지 보여주기위해 작성하였습니다.

28번 줄 : 오버라이딩한 내용을 출력합니다.

 

 

 

반응형

'JAVA > JAVA' 카테고리의 다른 글

8 - 생성자(Constructor)  (0) 2020.03.04
7 - 메소드  (0) 2020.03.04
6 - 클래스 ( class )  (0) 2020.03.03
5 - 배열(Arrary)  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03
반응형

생성자란?

 

new 연산자에 의해서 객체 생성시 항상 실행하는 것으로, 객체 초기화시에 사용된다.

 

특징

 

- 객체를 생성할 때 멤버 변수의 값을 쉽게 초기화하기 위함이다.

- 클래스 이름과 동일하다.

- 클래스에 인자 있는 생성자를 정의하고, 빈 생성자도 같이 사용하고 싶다면 반드시 정의해주어야 한다.

- 하나의 클래스 안에 여러개의 생성자를 정의할 수 있다.

 

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class ProDuctions {
 
    String name;
    int price;
 
    public ProDuctions() {
        // TODO Auto-generated constructor stub
 
    }
 
    public ProDuctions(String name) {
        // TODO Auto-generated constructor stub
        this.name = name;
    }
 
    public ProDuctions(int price) {
        // TODO Auto-generated constructor stub
        this.price = price;
    }
 
    public ProDuctions(String name, int price) {
        // TODO Auto-generated constructor stub
        this.name = name;
        this.price = price;
    }
 
}
 
public class ProductionMain {
 
    public static void main(String[] args) {
        ProDuctions pd = new ProDuctions();
        System.out.println("pd.name : " + pd.name + "   pd.price : " + pd.price);
 
        ProDuctions pd1 = new ProDuctions("감자");
        System.out.println("pd1.name : " + pd1.name + "   pd1.price : " + pd1.price);
 
        ProDuctions pd2 = new ProDuctions(50000);
        System.out.println("pd2.name : " + pd2.name + "   pd2.price : " + pd2.price);
 
        ProDuctions pd3 = new ProDuctions("고구마"123456);
        System.out.println("pd3.name : " + pd3.name + "   pd3.price : " + pd3.price);
 
    }
 
}
 

 

6-8 줄 : 빈 생성자를 정의

11-13 줄 : 객체 생성시 name 값을 초기화 시키고 this 생성자를 통해 자신 객체를 참조한다. this의 생성 이유는 클래스에서 정의된 멤버 변수임을 정의하기 위해서이다.

 

16-18 줄 : price 값을 초기화시키면서 객체를 생성할 수 있는 생성자를 정의하는 부분

21-24 줄 : name과 price 값을 초기화시키고 생성자를 정의

 

32-42 줄 : 각 다른 생성자를 호출해서 객체를 생성하고 각 변수 값을 출력한다.

 

 

반응형

'JAVA > JAVA' 카테고리의 다른 글

9 - 상속  (0) 2020.03.04
7 - 메소드  (0) 2020.03.04
6 - 클래스 ( class )  (0) 2020.03.03
5 - 배열(Arrary)  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03
반응형

메소드

 

- 메소드는 클래스가 수행할 수 있는 기능 정의

 

메소드 형태

 

리턴할 타입 메소드명 (파라미터1....) {

   내용;

}

 

- 메소드에 인자를 전달할 경우 값이 그대로 전달된다. 예시를 보여드리겠습니다.

 

int hap(int num1, int num2) {

      return num1 + num2;

}

위와 같은 메소드를 정의하고 다음과 같이 호출 할 수 있습니다.

int result = hap(100,200)

 

간단한 예를 들어보겠습니다.

 

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

27

28

29

30

31

32

class CarSpeed { 

 

    int speed; 

    public String irum; 

    

    //메소드 정의

    void speedhap(CarSpeed myCar) {

        

        myCar.speed += 50;

        

    }

}

 

public class MyCar { 

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        

        CarSpeed myCar = new CarSpeed();

        

        //변수 사용

        myCar.speed = 60;

        myCar.irum = "홍길동";

        

        //메소드사용

        

        

        myCar.speedhap(myCar);

        System.out.println(myCar.speed);

    }

 

}

 

 

1줄 - 변수 speed와 irum을 정의해주었습니다.

28줄 - speedhap 메소드를 실행하면 객체변수 speed의 값이 변경됩니다.

따라서 출력 결과는 다음과 같습니다.

 

 

출력 결과

 

1

110

 

메소드 오버로딩

 

- 같은 이름의 메소드를 한 클래스에 여러 개 정의할 수 있다.

 

메소드 오버로딩의 규칙

 

1) 파라미터의 타입이나 개수가 달라야 한다.

 

void 메소드명(int price);

void 메소드명(String name);

 

void 메소드명(int price, String name);

 

2) 파라미터의 이름은 오버로딩 성립에 영향을 주지 않는다.

 

void 메소드명(int x);

void 메소드명(int y);

 

3) 리턴 타입은 오버로딩 성립에 영향을 주지 않는다.

 

void 메소드명(int x);

int 메소드명(int x);

 

예문을 보도록 하겠습니다.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
class ProDuctions {
 
    String name;
    int price;
 
 
    public void display() {
        name = "감자";
        price = 456789;
 
        System.out.println("상품명 : " + name + " // 가격 : " + price );
    }
 
    public void display(String name) {
 
        System.out.println("상품명 : " + name + " // 가격 : " + price);
    }
 
    public void display(String name, int price) {
 
        System.out.println("상품명 : " + name + " // 가격 : " + price);
    }
 
}
 
public class ProductionMain {
 
    public static void main(String[] args) {
        ProDuctions pd = new ProDuctions();
 
        pd.display();
 
        pd.display("고구마");
 
        pd.display("왕감자"50000);
 
    }
 
}
 
 

9 - 13번, 33째 줄 - 선언한 변수에 변수 데이터값을 "감자"와 456789로 지정 해주었으므로 감자와 456789를 출력 할 것이다. 

16 - 18, 35번째 줄 - 메소드 오버로딩을 통해 파라미터 name을 새롭게 정의하여 "고구마"와 456789를 출력한다.

21 - 23, 37번째 줄 - 메소드 오버로딩을 통해 name과 price를 다시 정의하여 "왕감자"와 50000을 출력한다.

 

출력결과

1
2
3
상품명 : 감자 // 가격 : 456789
상품명 : 고구마 // 가격 : 456789
상품명 : 왕감자 // 가격 : 50000

 

반응형

'JAVA > JAVA' 카테고리의 다른 글

9 - 상속  (0) 2020.03.04
8 - 생성자(Constructor)  (0) 2020.03.04
6 - 클래스 ( class )  (0) 2020.03.03
5 - 배열(Arrary)  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03
반응형

클래스

자바에서 생성되는 프로그램의 최소 단위

 

클래스를 만드는 주된 이유

- 나만의 타입 코드를 클래스를 생성하기 위해서

 

 

클래스 형식

class 클래스명 {

     변수 정의;

     메소드 정의;

 

}

 

클래스 형식 예시

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Bank {
    
    // 클래스에서의 변수 지정
    String name;
    int num;
    int addmoney;
    
    // 메소드 지정
    void addMoney() {
        System.out.println("돈을 넣었습니다.");
    }
    
    void minusMoney() {
        System.out.println("돈을 뺏습니다.");
    }
 
 
}
 
 

객체 생성

Car mycar1; // Car 클래스 타입인 mycar1 레퍼런스 변수를 선언

mycar1 = new Car(); // new 연산자를 사용해서 메모리상에 mycar1 객체를 생성

그림으로는 다음과 같이 표현이 가능합니다

 

 

 

 

객체를 생성하고 객체의 변수와 메소드 사용하는 예시를 들어보겠습니다.

 

변수와 메소드를 정의해준 클래스

Car.java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Car { // 접근지정자 class 클래스명(대문자로 시작하고 source명과 동일해야함)
    // 멤버 필드(전역변수) : 속성(특성, 구성 요소)
 
    
    int speed; 
    public String irum; 
    
    //메소드 정의
    void speedUp() {
        speed++;
    }
    
    void speedDown() {
        speed--;
    }
 
}
 
 

객체를 생성하고 위에 만든 Car.java를 사용해보겠습니다.

MyCar.java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MyCar { 
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Car myCar = new Car();
        
        //변수 사용
        myCar.speed = 60;
        myCar.irum = "홍길동";
        
        //메소드사용
        System.out.println("차주인은 : "+myCar.irum + " 현재 속도는 : " +myCar.speed);
        myCar.speedUp();
        System.out.println("speedUp하였습니다. 현재 속도는 : " + myCar.speed);
        
        myCar.speedDown();
        System.out.println("speedDown하였습니다. 현재 속도는 : " + myCar.speed);
        
    }
 
}
 
 

 

6번째 줄 - Car 클래스를 새로운 객체 myCar로 생성합니다.

9-10번째 줄 - Car 클래스에 정의되어있는 변수를 사용합니다.

13-18번째 줄 - Car 클래스에 정의되어있는 메소드를 불러와서 사용합니다.

 

출력 결과

1
2
3
4
차주인은 : 홍길동 현재 속도는 : 60
speedUp하였습니다. 현재 속도는 : 61
speedDown하였습니다. 현재 속도는 : 60
 

 

이번에는 변수의 종류에 대해서 알아보도록 하겠습니다.

 

default 현재 패키지 내에서 호출 가능
private 캡슐화 - 현재 클래스 내에서만 홏출 가능
public 현재 프로젝트 내에서 호출 가능

 

 

 

 

 

반응형

'JAVA > JAVA' 카테고리의 다른 글

8 - 생성자(Constructor)  (0) 2020.03.04
7 - 메소드  (0) 2020.03.04
5 - 배열(Arrary)  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03
3 - 반복문 for & while  (0) 2020.03.03
반응형

점수를 입력받을 score 배열 크기 5

순위를 매길 rank 배열 크기 5

 

8번째 줄 for문을 통해 점수를 총 5차례 입력 받습니다.

13번째 줄 : 입력받은 점수 5개를 출력해줍니다.

18번째 줄 : index를 임시저장변수로 두고 i번째 점수를 index에 저장한 후 

19번째 줄 : score[j]배열을 사용하여 index에 저장된 점수와 비교하여 index의 값이 더 작다면 순위가 낮아야하므로 1을 증가시킵니다.

 

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
27
Scanner sc = new Scanner(System.in);
        
        int[] score = new int[5];
        int[] rank = new int[5];
        
        int index = 0;
        
        for(int i=0; i<score.length; i++) {
            System.out.print(i + 1 + "번 점수 입력 : ");
            score[i] = sc.nextInt();
            rank[i] = 1;
        }
        for (int i=0; i<score.length; i++) {
            System.out.println(score[i] + " ");
        }
        
        System.out.println();
        for(int i=0; i < score.length; i++) {
            for (int j=0; j<score.length; j++) {
                index = score[i];
                if(score[j] > index) 
                    rank[i] += 1;
            }
        }
        System.out.println("결과는 ");
        for(int i =0; i<rank.length; i++) {
            System.out.println(score[i] + "점은 " + rank[i] + "등");

 

출력 결과

 

1
2
3
4
5
6
7
8
9
10
11
12
95 
75 
66 
84 
10 
 
결과는 
95점은 1등
75점은 3등
66점은 4등
84점은 2등
10점은 5등
반응형
반응형

배열

성격과 크기가 일치하는 여러개의 기억 장소에 대해 대표명을 주고 첨자로 각 기억장소를 구분

반복처리에 효과적이다 !

 

배열 선언

 

방법1) 데이터 타입[] 배열 변수명

방법2) 데이터 타입 배열 변수명[];

ex) String[] name;

ex) int num[];

 

배열 생성

 

배열은 자바에서 객체 취급한다.

new 연산자에 의해 객체를 생성하고 할당받을 때는 배열의 크기를 정해준다.

데이터는 배열의 크기만큼 사용 가능하고

배열의 크기는 지정 이후 변경이 어렵습니다.

 

ex) name = new String[5];

ex) num = new int[10];

 

소스를 통해 알아보겠습니다.

 

변수 ar에 크기 5에 할당하는 배열을 주었습니다.

 

알아두면 유용한 문법 ! 

배열변수명.length : 배열의 크기를 알 수 있습니다 !
ar[0] 의 값은 10
ar[1] 의 값은 20 으로 할당해주었습니다.
ar[4] 의 값은 ar[0] 과 ar[1]의 데이터 값을 더한 값이므로 40
ar[3] 은 설정해준 값이 없으므로 0을 출력합니다.

 

1
2
3
4
5
6
int ar[] = new int[5]; // 배열의 크기를 5로 할당
        System.out.println("ar의 크기 : " + ar.length);
        ar[0= 10; ar[1= 20;
        ar[4= ar[0+ ar[1];
        System.out.println("ar[4]의 크기 : " + ar[4]);  // ar[0]의 10과 ar[1]의 20을 더하여 30 출력
        System.out.println("ar[3]의 크기 : "+ar[3]); // ar[3]은 정해준 데이터 값이 없어 0 출력
1
2
3
ar의 크기 : 5
ar[4]의 크기 : 30
ar[3]의 크기 : 0

다차원 배열

 

int num[][] = new int[][]; // 2차원 배열 - [행][열]

 

차원이 늘어갈수록 for는 다중으로 입력해주어야한다.

ex) 2차원 배열은 for문 2개

 

su 배열에 3행 4열의 크기를 주었습니다.

 

num은 10으로 for문을 통해 해당하는 배열의 행과열에 num 값을 1씩 증가시켜서 저장했습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
        int su[][] = new int[3][4];
 
        int num = 10;
 
 
        for(int i=0; i <su.length; i++) {
            for(int j=0; j<su[i].length; j++) {
 
            su[i][j] = num++;
            System.out.print(su[i][j] + " ");
            }
            System.out.println();
        }
 

출력 결과

1
2
3
4
10 11 12 13 
14 15 16 17 
18 19 20 21 
 

가변배열

 

예를 들어 설명하겠습니다.

 

int[][] scores = new int[2][] 으로 열은 따로 설정되어있지 않습니다.

이같은 열을

2,3번째 줄과 같이 유동적으로 설정이 가능합니다. 이것을 가변배열이라고합니다.

1
2
3
4
int[][] scores = new int[2][];
        scores[0= new int[2];
        scores[1= new int[3];
        System.out.println(scores.length + " " + scores[0].length + " " + scores[1].length);

 

4번째 줄을 출력하면 다음과 같은 결과값이 나옵니다.

 

1
2 2 3

 

해당 관련 연습문제

2020/03/03 - [JAVA/JAVA 프로그래밍 응용] - 배열을 이용한키보드로 5개의 점수를 입력받아 출력하기

반응형

'JAVA > JAVA' 카테고리의 다른 글

7 - 메소드  (0) 2020.03.04
6 - 클래스 ( class )  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03
3 - 반복문 for & while  (0) 2020.03.03
2 - 연산자  (0) 2020.03.03
반응형

키보드로 년과 월을 입력 받아 해당하는 년 월의 일 수를 출력하고 윤년인지 확인합니다.

윤년 해당 년도는 4의 배수입니다.

 

예를들어 2020년 2월이면 윤년이므로 "2020년 2월 날수 : 29일"을 출력

2019년 8월을 입력하면 윤년이 아니므로 "2019년 8월 날수 : 30일" 출력

 

year("년도") 값을 입력 받습니다.

month("월") 값을 입력 받습니다.

 

만약, 10번째 줄 if문에서 month의 값이 1보다 작거나 12보다 크다면 오류이므로 다시 입력해주라는 메세지를 출력해줍니다.

 

10번째 줄 if문이 참이라면 15번째 줄 if문으로 내려옵니다.

year의 값을 4로 나누었을때 나머지가 0이고 100으로 나누었을때 0이 아니고, 400으로 나누었을때 나머지가 0이면

윤년이므로 난수 29를 발생시킵니다.

 

18번째 줄에서 month의 값이 다음과 같은 홀수인 경우 31일을 출력하고, 짝수인 경우 30일을 출력해줍니다.

 

 

 

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
        int year, month, nalsu=0 ;
        Scanner sc = new Scanner(System.in);
                
        System.out.println("년 입력");
        year = sc.nextInt();
        
        System.out.println("월 입력");
        month = sc.nextInt();
        
        if(month < 1 || month > 12) {
            System.out.println("1 ~ 12 사이의 숫자를 입력하세요");
            System.exit(1);
        }
        
        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
            nalsu = 29;
        
        switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 9:
        case 11:
            nalsu = 31;
            break;
            
        case 4:
        case 6:
        case 8:
        case 10:
        case 12:
            nalsu = 30;
            break;
                        
        }
        
        System.out.println(year + "년 " + month + "월 " + "날수 : " + nalsu);
                
        System.out.println("종료");
        
        sc.close();
 

 

반응형
반응형

if문

 

- 실행할 문장이 '참'이면 실행해주고 '거짓'이면 실행하지 않습니다.

- if문 구성

 

if ( 조건식 ) {

   실행할 문장;

}

 

예문을 들어보겠습니다.

 

num변수의 값을 2로 주었습니다.

num 값이 3보다 크거나 같으면 '크다'와 '참'을 출력하고 거짓이면 '작다'와 '거짓'을 출력한다.

 

두번째로

num2 변수의 값을 5로 주고

num2 값이 3보다 작으면 '작다2'와 '참2'를 출력하고, 거짓이면 '크다2'와 '거짓2'를 출력한다.

// 조건 판단문 if
        int num = 2;
        
        if(num >= 3) {
            System.out.println("크다");
            System.out.println("참");
        }
        else {
            System.out.println("작다");
            System.out.println("거짓");
        }
        
        int num2 = 5;
        if(num2 < 3) {
            System.out.println("작다2");
            System.out.println("참2");
        }
        else {
            System.out.println("크다2");
            System.out.println("거짓2");
        }

 

작다
거짓
크다2
거짓2

 

 

다중 if문

 

if문 안에 if문이 또 존재하는 것으로 바로 예문을 들어보겠습니다.

 

변수 jum의 값을 75로 주었습니다.

if문을 통해 90이상이면 '수'를 출력

80이상이면 '우'를 출력

70이상이면 '미'를 출력

60이상이면 '양'을 출력

그 외는 '가'를 출력 하는 소스입니다.

 

int jum = 75;
        String re = "평가 결과 : ";
        
        if(jum >= 90) {
            re += "수";
        }
        else if(jum >= 80) {
            re += "우";
        }
        else if(jum >= 70) {
            re += "미";
        }
        else if(jum >= 60) {
            re += "양";
        } else {
            re += "가";
        }
 
        System.out.println(re);

 

평가 결과 : 미

 

 

 


 

Switch 문

 

조건이 여러 개일 경우 if문 대신에 사용 가능한 조건문입니다.

 

Switch문 형식

 

switch(변수) {

case 변수1 : 

       실행문;

       break;

 

case 변수2 : 

       실행문;

       break;

 

default:

       실행문;

}

 

예제로 넘어가겠습니다.

 

num 변수의 값을 20으로 정해주었습니다.

switch문을 통해 num 값이 20인 경우 20을 출력하고 30인 경우 30인 경우 30을 출력 그 외 '기타'로 출력합니다.

 

        int num = 20;
        
        switch(num) {
        case 20:
            System.out.println("20");
            break;
            
        case 30:
            System.out.println("30");
            break;
        default:
            System.out.println("기타");
                break// option
        }

 

20

 

if문과 switch문 공부한 문제

 

2020/03/03 - [JAVA/JAVA 프로그래밍 응용] - if문과 switch문 활용하여 년과 월을 받아 해당하는 월의 일 수 체크

반응형

'JAVA > JAVA' 카테고리의 다른 글

6 - 클래스 ( class )  (0) 2020.03.03
5 - 배열(Arrary)  (0) 2020.03.03
3 - 반복문 for & while  (0) 2020.03.03
2 - 연산자  (0) 2020.03.03
1 - 데이터 타입 & 형 변환  (0) 2020.03.02

+ Recent posts