스포츠마케터의 초보 개발자 도전기
JAVA study 13 본문
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 |