JAVA - Day8 - Static
<1> static이란?
//고객정보를 등록하는 클래스
//공유하는 변수를 만들고 싶을 때 static을 쓴다.
//변수에 커서를 댔을 때 s가 뜨면 공유되는 변수라는 뜻.
//공유는 시키되 고정값을 주고싶을 경우에 final static을 쓴다.
class Person
{
static int number = 0;
String name;
int age;
public Person (String name, int age)
{
this.number++;
this.name = name;
this.age = age;
//this는 클래스 자기자신을 뜻한다.
}
@Override
public String toString() {
return "고객숫자: "+ number+" 이름: "+ name +" 나이: "+ age;
}
}
public class StaticTest_01
{
public static void show()
{
System.out.println("static!");
}
void show2()
{
System.out.println("그냥 method!");
}
public static void main(String[] args)
{
System.out.println("#1");
Person p1 = new Person("홍길동", 10);
System.out.println(p1);
//공유되는 변수를 변경
Person p2 = new Person("Blue", 100);
System.out.println(p2);
//고객숫자가 1씩 증가하는 모습을 볼 수 있다.
System.out.println();
System.out.println("#2");
//static 변수는 클래스의 객체를 생성하지 않고.
//클래스의 이름으로 접근이 가능하다.
Person.number = 10;
System.out.println(Person.number);
System.out.println();
System.out.println("#3");
show();
//show2();
//show2는 메인함수에서 불러올 수 없다.
//static을 붙이지 않아서 객체를 할당해야 불러올 수 있다.
//참조변수, new 를 써서 만들 것.
StaticTest_01 n1 = new StaticTest_01();
n1.show2();
}
}
//고객정보를 등록하는 클래스
//공유하는 변수를 만들고 싶을 때 static을 쓴다.
//변수에 커서를 댔을 때 s가 뜨면 공유되는 변수라는 뜻.
//공유는 시키되 고정값을 주고싶을 경우에 final static을 쓴다.
class Person
{
static int number = 0;
String name;
int age;
public Person (String name, int age)
{
this.number++;
this.name = name;
this.age = age;
//this는 클래스 자기자신을 뜻한다.
}
@Override
public String toString() {
return "고객숫자: "+ number+" 이름: "+ name +" 나이: "+ age;
}
}
public class StaticTest_01
{
public static void show()
{
System.out.println("static!");
}
void show2()
{
System.out.println("그냥 method!");
}
public static void main(String[] args)
{
System.out.println("#1");
Person p1 = new Person("홍길동", 10);
System.out.println(p1);
//공유되는 변수를 변경
Person p2 = new Person("Blue", 100);
System.out.println(p2);
//고객숫자가 1씩 증가하는 모습을 볼 수 있다.
System.out.println();
System.out.println("#2");
//static 변수는 클래스의 객체를 생성하지 않고.
//클래스의 이름으로 접근이 가능하다.
Person.number = 10;
System.out.println(Person.number);
System.out.println();
System.out.println("#3");
show();
//show2();
//show2는 메인함수에서 불러올 수 없다.
//static을 붙이지 않아서 객체를 할당해야 불러올 수 있다.
//참조변수, new 를 써서 만들 것.
StaticTest_01 n1 = new StaticTest_01();
n1.show2();
}
}
<2> 접근 지시 제어자
//private
//선언된 클래스 안에서만 접근이 가능하다.
//외부 클래스 접근 x
//상속을해도 자식클래스가 접근할 수 없다.
//default
//같은 패키지 안에서만 접근이 가능하다.
//클래스들끼리 접근이 가능.
//아무것도 안쓰면 자동으로 default로 됨.
//protected
//같은 패키지 안에서 접근이 가능하다.
//다른 패키지에서도 조건하에 접근이 가능하다.
//조건 : 상속을 받고 protected 선언된 변수, 메서드에만 접근 가능.
// 상속을 할 때에는 public으로 선언된 클래스만 가능.
//public
//아무나 접근이 가능하다.
//#1
class A
{
public int num;
int num2;
public void show()
{
}
//public은 변수/함수 모두에 붙을 수 있다.
}
//#2
//private
//어떤 클래스에 대해서 데이터를 접근 금지시키고 싶을 때.
class Bank
{
//은행 계좌를 등록하는 클래스.
//계좌번호
//계좌명
//잔액 (돈): private
String Account_number;
String Account_name;
private int money;
//이제 money는 Bank와 Bank안에서 선언된 변수들만 접근이 가능하다.
public Bank(String acc_number, String acc_name, int money)
{
Account_number = acc_number;
Account_name = acc_name;
this.money = money;
}
@Override
public String toString() {
return "Bank [Account_number=" + Account_number + ", Account_name=" + Account_name + ", money=" + money + "]";
}
//Bank안에서 만든 함수라 money의 정보를 가져올 수 있다.
//#4'
//우클릭 source > getter&setter
//setter는 private한 변수에 접근해서 데이터를 수정할 수 있게 한다.
//누구나 접근이 가능한 (public) 함수를 만들어서 접근하게하는 원리.
//getter는 private한 변수에 접근해서 데이터를 반환한다.
public int getMoney()
{
return money;
}
public void setMoney(int money)
{
this.money += money;
//저금은 더해야하니까 복합연산자 써주자.
}
}
public class Test_02
{
public static void main(String[] args)
{
Bank a = new Bank("111-1110", "Blue", 10000);
//만원의 용돈을 저장해보자.
//a.money를 할 수가 없음.
//Bank라는 클래스 안으로 들어가서 접근하자.
//#4
//setter를 이용한다.
a.setMoney(10000);
System.out.println("변경된 잔액: "+a.getMoney());
}
}
<3> setter 와 getter
import java.util.Scanner;
class stu
{
private String name;
private String birth;
private double hei;
private double wei;
//#2'
static int stunum =0;
//생성자를 만들지 않고 기본생성자를 쓰자.
//#1'
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public double getHei() {
return hei;
}
public void setHei(double hei) {
this.hei = hei;
}
public double getWei() {
return wei;
}
public void setWei(double wei) {
this.wei = wei;
}
@Override
public String toString() {
return "name=" + name + "("+birth+")" + hei+ "/" + wei;
}
}
public class Test_03
{
public static void main(String[] args)
{
stu s1 = new stu();
//#1
//s1.변수 를 할 수가 없다.
//접근하려면 외부클래스가 내부클래스 안으로 들어가야 한다.
//들어갈 수 있도록 다리를 연결해주자 >> setter&getter
//#2
//실습하기
//getter/setter 이용하기.
//toString 이용하지 말 것.
//학생 번호는 static을 사용할 것.
//3명의 학생정보를 입력하자.
//1번째 학생 : BlueDragon
//181021 170.4 60
//2번째 학생 :이선우
//800202 170.15 48
//3번째 학생 :이서희
//810303 150.14 50
stu blue = new stu();
blue.stunum++;
blue.setName("BlueDragon");
blue.setBirth("1918년 10월 21일");
blue.setHei(170.4);
blue.setWei(60);
System.out.println(blue.stunum+"."+
blue.getName()
+"/"
+blue.getHei()
+"/"
+blue.getWei());
stu s2 = new stu();
s2.stunum++;
blue.setName("요다참치");
blue.setBirth("1998년 2월 6일");
blue.setHei(169.8);
blue.setWei(60);
System.out.println(blue.stunum+"."+
blue.getName()
+"/"
+blue.getHei()
+"/"
+blue.getWei());
//쭉쭉..
//#3
//이렇게 많은걸 배열로 설정할수 있지 않을까?
//배열선언
Scanner sc = new Scanner(System.in);
stu [] s = new stu [2];
// for(int i =0; i<s.length; i++)
// {
// System.out.println("이름>>>");
// s[i].setName(sc.nextLine());
// System.out.println("생년월일>>>");
// s[i].setBirth(sc.nextLine());
// //쭉쭉..
// System.out.println("입력끝!");
// }
//실행하면 메모리가 부족하다는 에러생긴다.
//객체가 생성되지 않았기 때문.
//위의 반복문은 클래스의 객체를 생성한게 아니라
//객체의 주소값을 담을 수 있는 배열을 생성한거임.
//주소값만 저장하는 배열에 여러개의 데이터를 담을수가 없다!
//할당될 메모리(객체)를 만들어주자.
}
}
댓글
댓글 쓰기