Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
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
Archives
Today
Total
관리 메뉴

스포츠마케터의 초보 개발자 도전기

JAVA study 13 본문

develop/JAVA

JAVA study 13

teammate brothers 2024. 3. 14. 12:32

1. Static 변수, 메서드

객체가 아무리 많이 만들어져도 메모리에 딱 한개만 생성되는 변수나 메서드

stack 메모리 heap 메모리 static 메모리
A1 info1 info3의 정보가 같고 한번에 변경되어야할때 static을 선언하여 사용

A1, A2, A3 중 누가 호출하던 3개가 한번에 다 바꿀 수 있음

객체를 생성하지 않아도 클래스 명으로 단독 호출 가능

static 변수를 너무 많이 만들면 속도가 느려질 수 있음
info2
info3
A2 info1
info2
info3
A3 info1
info2
info3
package ex1_static;

public class Bank {

	private String point;
	private String tel;
	static float interest; // 이자율
	// static 변수, 메서드 :
	// 객체가 아무리 많이 생성되어도 메모리에 딱 한개만 생성되는 변수나 메서드

	public Bank(String point, String tel) {
		this.point = point;
		this.tel = tel;
		interest = 10f;
	}

	public void getBank() {
		System.out.println("지점 : " + point);
		System.out.println("전화 : " + tel);
		System.out.println("이자율 : " + interest + "%");
		System.out.println("----------------------");
	}
}

--

package ex1_static;

public class BankMain {
	public static void main(String[] args) {

		Bank b1 = new Bank("홍대", "02-1111-1111");
		Bank b2 = new Bank("이대", "02-2222-2222");
		Bank b3 = new Bank("서강대", "02-3333-3333");

		// static으로 생성된 변수는 객체를 생성하지 않아도, 클래스명으로 단독 호출이 가능
		Bank.interest = 0.1f;

		b1.getBank();
		b2.getBank();
		b3.getBank();

	}// main
}

 

static 오류 경우

package ex2_static;

public class StaticTest {

	int n;
	static int n2;

	public void test() {
		n = 10;
		n2 = 20;
	}
	// static int n3 = 10; // 안됨!!
	// 일반메서드에서는 static 변수를 정의할 수 없다

	public static void test2() {
		int n2 = 10;

		// static메서드에서 일반 변수를 가져오는 것은 불가
		// n = 10;
	}

}

 

2. inheritance 상속

package ex3_inheritance;

public class Parent {

	private int money2 = 100000000;
	// private를 선언하면 상속되지 않는다.

	int money = 2000000000;
	String str = "신촌";

}

--

package ex3_inheritance;

public class Child extends Parent {
	// 상속 : 부모의 재산을 자식이 물려 받음
	// extends 키워드를 통해 Child를 Parent의 자식 클래스로 지정할 수 있다.
    // 공통 특성이 있는 것을 부모로 만들어 사용하면 메모리 절감에 도움
	String car = "티코";
}

--

package ex3_inheritance;

public class InheriMain {

	public static void main(String[] args) {
		Child c1 = new Child();
		System.out.println(c1.money);
		// System.out.println(c1.money1);
		// private를 선언하면 상속되지 않는다.
		System.out.println(c1.str);

		Parent p1 = new Parent();
		// 상속관계라고 할지라도 부모 클래스는 자식의 속성으로 접근할 수 없다
		// System.out.println(p1.car);

		// 왼쪽의 객체와 오른쪽의 클래스의 인스턴스(c1이 Parent의 자식인가?)가 같다면 true를 반환
		if (c1 instanceof Parent) {
			System.out.println("c1은 Parent의 자식");
		}
		//Object는 JAVA의 최상위 클래스로서 모든 객체와 인스턴스가 같다. (Object가 조상)
		if (p1 instanceof Object) {
			System.out.println("p1은 Object의 자식");
		}

	}// main

}

 

3. override 오버라이드

package ex4_override;

public class Animal {

	private int eye = 2;
	private int leg = 4;

	public int getEye() {
		return eye;
	}

	public int getLeg() {
		return leg;
	}

}

--

package ex4_override;

public class Bear extends Animal {
	String woongdam = "웅담";
}
package ex4_override;

public class Elephant extends Animal {

	String nose = "코가 손임";

}
package ex4_override;

public class Snake extends Animal {

	String sensor = "밤에도 잘봄";

	public int getSnakeLeg() {
		return 0;
	}

	// 오버라이드 : 메서드를 재 정의하여
	// 부모의 메서드를 가져와 자식사정에 맞게 내용만 재정의 하는 것.
	@Override
	public int getLeg() {

		return 0;
	}

}

--

package ex4_override;

public class AnimalMain {

	public static void main(String[] args) {

		Bear bear = new Bear();
		System.out.println("---곰---");
		System.out.println("눈 : " + bear.getEye());
		System.out.println("다리 : " + bear.getLeg());
		System.out.println("특기 : " + bear.woongdam);

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

		Elephant elephant = new Elephant();
		System.out.println("---코끼리---");
		System.out.println("눈 : " + elephant.getEye());
		System.out.println("다리 : " + elephant.getLeg());
		System.out.println("특기 : " + elephant.nose);

		Snake snake = new Snake();
		System.out.println("---뱀---");
		System.out.println("눈 : " + snake.getEye());
		System.out.println("다리 : " + snake.getLeg());
		System.out.println("특기 : " + snake.sensor);

	}// main

}

 

예제) 오버라이드로 계산기 만들기

package ex5_override;

public class Calculator {

	public void getResult(int a, int b) {

		System.out.println("나는부모야");
	}

}

--

package ex5_override;

public class CalPlus extends Calculator {

	public void getResult(int a, int b) {
		System.out.println(a + b);
	}

}
package ex5_override;

public class CalMinus extends Calculator {

	public void getResult(int a, int b) {
		System.out.println(a - b);
	}

}

--

package ex5_override;

public class CalMain {
	public static void main(String[] args) {

		CalPlus cp = new CalPlus();
		CalMinus cm = new CalMinus();

		cp.getResult(10, 5); // 15
		cm.getResult(10, 5); // 5

	}// main
}

 

4. super : 자식클래스에서 부모클래스 호출

package ex6_super;

public class Parent {

	int age;

	public Parent(int n) {
		System.out.println("부모클래스의 생성자");
	}

	public void result() {
		System.out.println("나는 부모야");
	}
}

--

package ex6_super;

public class Child extends Parent {

	// super : 부모클래스. 기본적으로 숨어있음. 부모클래스의 이름을 그대로 쓸 순 없음. 메모리 영역에 부모클래스가 먼저 만들어지므로 다른
	// 명령보다 먼저 쓰여져야함
	// super() - 부모클래스의 생성자
	// super.result(); - 부모의 메서드
	// super.age : 부모의 변수
	// 부모클래스에 파라미터값을 넣어야하는 경우 super를 살려서 파라미터로 보냄. 값이 없으면 자식클래스도 오류 발생

	public Child() {
		super(10);
		System.out.println("자식클래스의 생성자");
	}

	@Override
	public void result() {

		super.result();// 부모의 메서드 호출
	}

	public void setAge(int age) {
		super.age = age; // this.age로 하면 자신의 클래스를 먼저 탐색하고 지정한 변수가 없으면 부모클래스로 간다. //super쓰면 바로 부모클래스로 간다.
	}

}

--

package ex6_super;

public class SuperMain {

	public static void main(String[] args) {

		Child c = new Child();

	}// main
}

 

5. Object

package ex7_object;

public class ObjTest {

	private Object value;
	
	public void setTest(int n) {
		System.out.println("int : " + n);
	}
	
	public void setTest(String s) {
		System.out.println("String : " + s);
	}
	
	public void setValue(Object value) {
		this.value = value;
	}

	public Object getValue() {
		return value;
	}
}

--

package ex7_object;

public class ObjMain {

	public static void main(String[] args) {

		// 모든 것을 Object로 만들면 모든 자료형을 받을 수 있어 편하지만 방대한 메모리가 필요해서 비추
		ObjTest ot1 = new ObjTest();
		int num = 100;
		ot1.setValue(num);// 기본자료형 -> 객체 : AutoBoxing 자동 형변환

		// 객체 -> 기본자료형 : Unboxing
		int num2 = (int) ot1.getValue();

		ObjTest ot2 = new ObjTest();
		ot2.setValue("String 문자열");
		String str = (String) ot2.getValue();

	}// main
}

 

과제) 내방식으로 풀어볼것(하단)

package ex8_work;

import java.util.Scanner;

public class WorkMain {
	public static void main(String[] args) {

		// 문장 : aabbbcc
		// 압축결과 : a2b4c2

		// 값을 입력받기
		Scanner sc = new Scanner(System.in);
		System.out.print("입력 : ");
		char[] str = sc.next().toCharArray();

		for (int i = 0; i < str.length; i++) {
			for (int j = 0; j < str.length; j++) {
				if(str[j] > str [i]) {
					char temp = str[i];
					str[i] = str[j];
					str[j] = temp;
				}
			}
			

		}
		for(char i : str)
		System.out.print(i + " ");

	}// main
}

 

과제) tCode

package ex8_work;

import java.util.Scanner;

public class WorkMain_tCode1 {
	public static void main(String[] args) {

		// aabbab 입력
		// a2b2a1b1 출력

		Scanner sc = new Scanner(System.in);
		System.out.println("입력 : ");
		String input = sc.next();

		String result = ""; // 결과값을 저장할 변수
		int count = 1;

		for (int i = 1; i < input.length(); i++) {

			if (input.charAt(i) == input.charAt(i - 1)) {
				count++;
			} else {
				result += input.charAt(i - 1);
				result += count;
				count = 1;
			}
		} // for

		// 마지막 문자 처리
		result += input.charAt(input.length() - 1);
		result += count;

		System.out.println("결과 : " + result);
	}

}

 

과제) 다른 사람 code

package ex8_work;

import java.util.Scanner;

public class WorkMain_tCode2 {
	public static void main(String[] args) {

		// aabbab 입력
		// a4b2 출력

		Scanner sc = new Scanner(System.in);
		System.out.println("입력 : ");
		String str = sc.next();
		String result = "";

		for (int i = 0; i < str.length(); i++) {
			if (result.indexOf(str.charAt(i)) == -1) { //if로 값을 찾을때 없으면 0 이 아닌 -1을 돌려줌. 참/거짓 (거짓일때 -1)
				result += str.charAt(i);
			}
		} // for

		for (int i = 0; i < result.length(); i++) {
			int count = 0;
			for (int j = 0; j < str.length(); j++) {
				if (result.charAt(i) == str.charAt(j)) {
					count++;
				}
			} // inner
			System.out.print("" + result.charAt(i) + count);
		} // outer

	}// main
}

 

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

JAVA study 15  (0) 2024.03.18
JAVA study 14  (0) 2024.03.15
JAVA study 12  (0) 2024.03.13
JAVA study 11  (1) 2024.03.12
JAVA study 10  (0) 2024.03.11