Sponsored By
















 

한 클래스가 여러개를 상속받지 못한다.

그래서 고안된것이 인터페이스 이다.

 

 

 

인터페이스(Interface) 사용방법을 알아보자.

 

 

 

 

 

먼저, 

 

interface는 모든 메소드가 추상인 클래스 라고 생각하면 쉽다.

클라스라는 이름을 사용하지 못하는 이유는 자바가 다중상속을 허용하지 않기 때문에 다중으로 상속받기 위한 방법 제공해주는 것. 따라서 이때는, abstract 키워드를 사용하지 않는다.

 

 

 

 

00. 기본 문법은 다음과 같다. 

    Class 대신에 interface를 써주고 상속받는것을 extends 대신에 implements로 기입하면 된다.








01. '마우스오른쪽버튼' 클릭-> 'Source' -> 'Override/Implement Methods...' 클릭해서 implements 할것을 

     선택 후 확인버튼을 클릭하면 에러없이 정상작동한다.

 

 

 

 

 

 

 

추상(abstract), 추상메소드, 추상클래스 에 관한 사용방법임.

 

 

 

 

'abstract'는 부모에서 자식으로 상속될때 이것은 꼭 해달라고 부탁하는 방법이다.

 

따라서 상속받은 자손은 이것을 작성하지 않고서는 실행할 수 없다.

 

 

 

 

순서를 기입해놨으니 잘 따라오면서 이해하기 바람.

 

 

 

 

 

 

 

1번에 있는것을 상속시킬때 자손들이 해줬으면 해서 'abstract' 를 붙인다.

 

그러면 에러가 뜨게 되는데 추상은 추상클래스에서 밖에 사용할 수 없기 때문이다.

 

따라서, 2번에서 처럼 클래스 이름앞에다 추상(abstract)을 붙여준다.

 

그러면 3번에서 처럼 Car를 extends한 자손은 반듯이 써야만 정상적으로 작동하게 된다.

 

 

 

 

 

 

 

상속(Inheritance) 에 관한 사용방법임.

 

 

 

 

 

 

00_1. 상속을 하기전에 이번에는 Typing하지말고 

'마우스오른쪽버튼' -> 'Sources -> 'Generate Getters and Setters...' 를 눌러서 만들어보자. 

'toString()'메소드도 마우스를 이용해서 만들어보자.







00_2. 객체를 만들고 객체를 출력시키면 toSrting()메소드가 작동하여 출력된다.







01_1. 상속을 할때에는 접근권한을 'protected'로 변수들을 보호해줘서 상속받는 클래스에서 사용가능하게 

        만들어줌. 또한, 상속받는 클래스에서는 'extends' 를 붙여 클래스를 상속받는다.







01_2. 출력을 해보면 'sc'객체를 만들어서 'I am SportsCar'가 출력되려고하는데 상속받은 것이있어서 

부모클래스의 'I am Car' 가 먼저 출력되는 것을 확인할 수 있다.






02_1. data 값을 지정해주고 변수/ this.변수/ super.변수/ 값들을 비교해보자.







02_2. 'print()'함수내에 있는 data값이 '200.34'이므로 그대로 출력이된다.

this.data 는 그 함수내에 있는-this- data값이므로 이것역시 '200.34' 가 출력된다.

super.data 는 부모클래스의 있는 data 값이므로 '100' 이 출력된다.







03_1. 생성자에 파라미터값을 지정하고 출력을 하면 기본생성자로 출력이 됨을 볼 수 있다.

부모클래스를 불러오지 않았기 때문에 'default' 인 생성자로 호출되는 것이기 때문이다.

 

 

 

 

 

03_2. 출력물 어디에도 'I am a SportsCar with sth'을 찾아볼 수 없다.







※. 코드

 

 

class Car {

protected String color;  // 상속받는 애들도 볼 수 있게 접근권한을 protected로 준다.

protected int speed;

protected String name;

 

int data = 100;  // 변수의 override를 테스트하기 위한 Package변수.

 

public Car()

{

/* this.color = "UnknownColor";

this.name = "Unknown";

this.speed = (int) (Math.random() * 100); */

 

this("Unknown", "UnknownColor");  // 밑에 코드에 Unknown UnknownColor를 넣으면 똑같아 지기때문에 이렇게 사용해도 된다.

// this() 메소드는 코드의 맨 처음에 와야만 한다. 

System.out.println("I am Car");

}

 

public Car(String name, String color) { // 생성자

this.color = color;

this.name = name;

this.speed = (int) (Math.random() * 100);

}

 

 

 

/* Getters and Setters */

public String getColor() {

return color;

}

 

public void setColor(String color) {

this.color = color;

}

 

public int getSpeed() {

return speed;

}

 

public void setSpeed(int speed) {

this.speed = speed;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

 

public void print()

{

System.out.println("car.print() 마음에 안드는 코드");

}

 

 

 

@Override

public String toString() {

return "Car [color=" + color + ", speed=" + speed + ", name=" + name + "]";

}

 

}// Car Class

 

 

 

 

class SportsCar extends Car {

private boolean turbo = false;

 

//int data = 200;  // for variable override temporary.

double data = 200.34;  // 변수는 데이터타입이 달라도 이름만 같으면 overriding 된다. 

 

public SportsCar()

{

//super();  // super(); 메소드 역시 코드의 맨 위에 위치해 있어야 한다.

super("BMW", "YELLOW");  // Car(String , String ); 를 의미.

System.out.println("I am SportsCar");

 

}

 

public SportsCar(String name, String color)

{

// super(name, color); 

// ㄴ 부모(super)를 지정하지 않으면 무조건 default constructor를 호출한다.

System.out.println("I am SportsCar with sth");

}

 

 

 

@Override

public void print() {

 

super.print();  // 메모리에 가지고 있음을 확인 할 수 있다.

System.out.println("sportscar print() 재정의");

 

System.out.println("data =  "+ data); // 200 예상

System.out.println("this.data =  "+ this.data); // 200 예상

System.out.println("super.data =  "+ super.data); //100 예상

 

}

 

 

 

public boolean isTurbo() {

return turbo;

}

 

public void setTurbo(boolean turbo) {

this.turbo = turbo;

}

 

 

 

@Override

public String toString() {

return "SportsCar [turbo=" + turbo + ", color=" + color + ", speed=" + speed + ", name=" + name + "]";

}

 

 

 

}// SportsCar Class

 

 

 

 

 

public class Test {

 

public static void main(String[] args) {

 

Car taxi = new Car("taxi", "RED");

Car bus = new Car("bus", "BLUE");

 

System.out.println(taxi);

System.out.println(bus);

 

SportsCar sc = new SportsCar();

 

System.out.println(sc);

 

sc.print();

 

 

 

}// main

 

}// Main Class

 

 









 

난수(Random수) 를 배열에 넣는 방법임.

 

 

 

 

 

 

 

 

 

00. 로또처럼 1~46개중 랜덤하게 뽑히게 하기 위한 방법이다. 

 

메인메소드에서 배열이름 lotto로 주고 배열은 genNumber()의 수를 받아오는 것으로 선언했다.

 

그리고 이 lotto의 배열중 값만을 출력하기위해 Extended for문을 사용해서 출력했다.

 

lotto 배열로 값을 받아오기위해 아래쪽에 getNumber메소드를 Static(메인이 static이므로 static은 static밖에 사용못하기떄문.)으로 해서 만들었다. 

 

6개 짜리 메모리 배열을 int 타입으로 만들어서 i가 6번(lenth만큼)돌아갈 갈 동안 array에 순서대로 랜덤값을 int타입으로 casting해서 집어넣어줬다.







01. 형식을 맞춰주는 방법은 System.out.println()으로 출력시 적절하게 입력해주기만 하면 된다.

 

 

 

 

 

※. 코드

 

 

public class Test {

 

public static void main(String[] args) {

 

int[] lotto ;

int i;

 

lotto = genNumber();

 

for(int value : lotto)

{

System.out.print(value + "\t");

}

 

dump(lotto);

 

 

}// main

 

public static int[] genNumber()

{

int [] array = new int [6];

int i;

for(i=0 ; i < array.length ; i++)

{

array[i] = (int)(Math.random() * 45 +1 );

}

return array;

}

 

public static void dump(int[] array2)

{

System.out.println("dump...");

 

int i ;

for (i = 0 ; i < array2.length ; i++)

{  // array[0] = 5 로 출력하고자 한다.

 

System.out.println("array["+i+"] = "+ array2[i]);

 

}

 

}

 

 

}// Main Class

 

ㅁ. 메모리(RAM) 는 3가지 영역으로 나뉘어서 쓴다.

 

1. data 

2. stack ; FILO LIFO  (First In Last Out) (Last In First Out)

3. heap ; 객체생성하면 만들어짐.

 

이중에서

 

 

 

스택구조 형식에 대한 프로그래밍 하는 방법임.

 

 

 

 

 

 


00. 먼저 구조를 생각한다. 

스택의 이름을 stack배열로 해서 만들고 top이 몇번째 배열에 와 있는지 보기위해 int값으로 top을 변수로 선언한다.

 

 

 

 

 

01. FILO 의 법칙을 만족시켜주기 위해서 top = -1에서 부터 시작한다.(0부터 stock되기 시작하므로)

또한, 프로그램을 작동 시켰을때, 사용자가 입력해서 작동하도록 하기위해 Scanner 객체를 만든다.

또한, 사용자가 입력한것들을 사용되기위해 각각의 메소드를 집어넣는다.

 

 

 

 

 

 

 

02. 결과 값이다. 제대로 작동하고 있음을 확인할 수 있다.

 

 

 

 

 

 

※ dump 와 print의 차이?

예, 하나의 특정값을 출력해라-> 프린트

     모든 값을 출력해라-> 덤프

 

 

 

 

 

 

※. 코드

 

 

import java.util.Scanner;

 

class Stack {  // [1]push [2]pop [3]dump [4]exit 로 만들것임.

private int[] stack;  // int타입의 배열의 이름을 stack으로

private int top;  // int 타입의 top변수 선언

 

public Stack(int size)

{

stack = new int[size];  // int[] lotto = new int[6]; 로 만들어 주고 싶음.

top = -1;  // top이 -1이면 비어있는 값. 왜냐하면 하나라도 있으면 top이 배열이 0번째로 시작되기 때문이다. 

 

System.out.println("Stack is created");

 

}// 생성자 Stack

 

public boolean isFull()

{

if (top == stack.length -1)

{

return true;

}else

{

return false;

}

}// isFull

 

public void printMenu()

{

System.out.println(" [1]Push [2]Pop [3]Dump [4]Exit ");

}

 

public void push(int value)

{

stack[++top] = value;  //top++; stack[top] = value; 

System.out.println(value + " is pushed");

}

 

public void pop()

{

if(top == -1)

{

System.out.println(" Stack is Empty. ! ! ! ");

return;  //else 대신 리턴을 쓰고 밑에 코드로 넘어간다.

}

 

System.out.println(stack[top--] + " is popped");  // System.out.println(stack[top] + " is popped"); pop--; 

 

}// pop

 

public void dump()

{

int i;

for (i = top ; i >=0 ; i--)

{

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

}// for

 

}// dump

 

}// Stack Class

 

 

 

public class Test {

public static void main(String[] args) {

 

Stack s = new Stack(5);

 

Scanner scan = new Scanner(System.in);

int cmd;

 

while(true)

{

s.printMenu();

 

cmd = scan.nextInt();  //사용자로부터 값을 입력받아 cmd변수에 초기화.

 

if(cmd == 1)

{  //push

// 넣기전에 full 검사

if(s.isFull() == true)

{

System.out.println("Stack is Full");

}else

{

int input;

System.out.println(" Insert Push Value ");

input = scan.nextInt();

s.push(input);

}

}else if(cmd ==2)

{  //pop

s.pop();

}else if (cmd == 3)

{  //dump

s.dump();

 

}else if (cmd == 4)

{

break;

}

 

}// while

 

scan.close();

 

}// main

 

 

}// Main Class

 

 

 

 

 



Sponsored By















+ Recent posts