java-class

ezzange·2022년 8월 29일
0

java

목록 보기
11/16
post-thumbnail

클래스를 구성하는 요소를 멤버라고 부르며 총 4가지가 있다.
1. 멤버필드
2. 멤버메서드
3. 생성자 : 필드의 초기화
4. 내부 클래스

package classes;
//point --> 8바이트의 인티형변수 두개의 집합
//새로운 데이터 파일이라고 접근 
  public class Point {
      int x;
      int y;
      //인스턴스 변수 : 멤버 필드
      //static int aaa;
      //모든클래스에는 1개 이상 생성자가 존재합니다.
  }


package classes;

  public class ClassTest01 {
      public static void main(String[] args) {
          //용량이 어느정도 담을지 몰라 static을 사용하지 않고 heep메모리에 저장한다.
      Point p1=new Point();
      p1.x=10;
      p1.y=20;
      System.out.println(p1.x);
      System.out.println(p1.y);
      //서로 다른 데이터리다. 
      //
      //객체변수란 힙메모리에 메모리를 할당시켜 참조변수를 
      Point p2=new Point();
      p1.x=100;
      p1.y=200;
      System.out.println(p1.x);
      System.out.println(p1.y);



      }//main
  }//class
  
  기대값
  
  10
  20
  100
  200
  

내가 정하는 새로운 데이터 타입

class -교재 p.197

package classes;
import java.util.Scanner;

public class Circle {
    Point pos;//참조형은 null초기화
    double r;//더블형은 0 초기화
    Scanner in;

    //필드의 초기화 담당: 생성자 
    //생성자
    //클래스이름과 생성자의 이름은 같다.
    //메서드와 구조가 비슷하게 생겼으며 이름 뒤에 ()하고 바디가 존재한다.
    //생략가능하다.
    Circle(){
        pos=new Point();
        r=0;
    }
}


package classes;

public class CircleText01 {
    public static void main(String[] args) {
        //
        Circle c1=new Circle();
        c1.pos = new Point();
        c1.r=2.5;
        //[2,3]
        c1.pos.x=2;
        c1.pos.y=3;
        //c1.pos.x=10;
        System.out.println(c1.pos);
        System.out.println("["+c1.pos.x+","+c1.pos.y+"]");
        System.out.println(c1.r);

        //System sys = new System();

    }

}

기대값
classes.Point@2f92e0f4// 타입
[2,3]
2.5

생성자와 메서드

package classes;

public class ConstructorText {

    public static void main(String[] args) {
    //new가 힙에 메모리를 할당해주는 역할을 한다.
        Point02 p2= new Point02();

        System.out.println(p2.x);
        System.out.println(p2.y);

        p2=new Point02(10);//여기서 10은 객체 초기값을 내가 한다라고 라고 생각하면 됌
        System.out.println(p2.x);
        System.out.println(p2.y);

        p2=new Point02(100);//인자, argument
        System.out.println(p2.x);//객체는 필드 다음 메서드를 호출함 
        System.out.println(p2.y);

        p2 = new Point02("123");//문자열 출력
        System.out.print("");
        System.out.println(p2.x);
        System.out.println(p2.y);

        p2=new Point02(5, 50);//인자, argument
        System.out.println(p2.x);//객체는 필드 다음 메서드를 호출함 
        System.out.println(p2.y);



    }//main
}//class

package classes;

public class Point02 {

    int x;//필드 인스턴스 변수  --> 생성자 바깥쪽에 선언되어 있는 것 
    int y;//인스턴스 변수는 'new' 키워드를 사용하여 객체를 생성할 때 생성되고 객체가 소멸되면 소멸
//중복으로 생성은가능 하지만 호출할때는 컴파일러가 구분할 수 있도록 
//이름은 일치하되 매개변수의 타입 혹은 갯수를 다르게 만들어야 사용가능 하다.

    //생성자 생성 --> 정의
    public Point02() {
        x=10;//여기선 구분할 필요가 없어 this.x라고 안해도 되지만 
             //명확하게 구분하고 싶거나 내부클래스가 또 생성될 경우엔 적용한다.
        y=20;
        System.out.print("["+x+","+y+"]\n");
        //int x;
    }//생성자 Point02

    public Point02(int x) {//지역변수 x 파라미트?

        this.x=x;//멤버필드 x하고 지역변수x를 구분하기 위해 this 키워드 사용
        y=2000;
        //int x 라는 매개변수가 있으면 생성자가 중복이 아니다 다른 생성자로 판단.
        //public Point02() {}라고 되어 있으면 코드중복으로 실행되지 않는다.
    }

    public Point02(String x) {//문자열로 나타낼 수 있는 생성자
        this();//디스생성자는 생성자 내부의 첫번째문장에서만 허용되며,
           //파라미트가 디폴트값인 것을 의미한다. 
        //이것은 Point02(String x)를 지나 public Point02() {}에 있는 값이 호출된다.
        this.x=Integer.parseInt(x);
        y=22;
    }
    public Point02(int x,int y) {//변수의 갯수가 달라졌기때문에 사용가능한 코드

            this.x=x;//현재클래스의생성자
            this.y=y;

    }
    //1. 형태는 메서드와 비슷하다.이름(파라미트){바디}
    //2. 이름이 클래스 이름과 같다.
    //3. 생성자는 여러개 정의할 수(만들어 낼)수 있지만--> 생성자 오버로드(Overload)
    //컴파일러가 호출시 구분할 수 있도록 매개변수의 타입 혹은 갯수를 다르게 만들어야 사용가능 하다.
    //4.일반적으로 멤버필드 =초기화를 담당하고 있다.
}//class Point02 

기대값

  [10,20]
  10
  20
  10
  2000
  100
  2000
  [10,20]
  123
  22
  5
  50
  
  

은행 금리 적용

간단 적용

package classes;

public class Bank02{
	
	String name;
	static double rate;//클래스변수, 정적변수
	long money;
	
	
	public Bank02(long money) {
			this.money=money;
			System.out.println("통장개설 완료!"	);
	
	}
	public Bank02() {
		System.out.println("통장개설 완료!"	);
	}
	//객체 생성 최초시 딱 1번만 실헹됩니다.
		static {
			rate=2.5;
			System.out.println("이자율 적용"	);
		}
	
}//Bank
package classes;

public class BankText02 {
	public static void main(String[] args) {
		Bank02 b = new Bank02();
		Bank02 b1 = new Bank02();
		b1.money=100000;
		
		Bank02 b2 = new Bank02(10000);

기대값

이자율 적용
통장개설 완료!
통장개설 완료!
통장개설 완료!

심화 적용

static 필드는 클래스이름으로 접근한다.

package classes;

public class Bank02{
	
	String name;//static 필드는 클래스이름으로 접근한다.
	static double rate;//클래스변수, 정적변수 --> 공유
	long money;
	
	
	public Bank02(long money) {
			this.money=money;
			System.out.println("통장개설 완료되었습니다!"	);
	
	}
	public Bank02() {
		System.out.println("통장개설 완료되었습니다!"	);
	}
	//객체 생성 최초시 딱 1번만 실헹됩니다.
		static {
			rate=2.5;
			System.out.println("현재 이자율 적용되었습니다"	);
		}
	
}//Bank
package classes;

public class BankText02 {
	public static void main(String[] args) {
		
		System.out.println("공통이자율 : "+Bank02.rate);
		Bank02 b1 = new Bank02();
		b1.name = "이현땡고객님";
		b1.money = 100000;
		long interest= (long)(b1.money *Bank02.rate / 100);
		b1.money = b1.money +interest;
		System.out.println(b1.name+" : "+ b1.money);
		
		Bank02 b2 = new Bank02(10000);
		b2.name = "오쉬맨고객님";
		b2.money = 10000;
		interest= (long)(b2.money *Bank02.rate / 100);
		b2.money = b2.money +interest;
		System.out.println(b2.name+" : "+ b2.money);
		
		System.out.println("3개월 이후 이자변동이 있습니다.");
		Bank02.rate=3.5;
		
		interest= (long)(b1.money *Bank02.rate / 100);
		b1.money = b1.money +interest;
		System.out.println(b1.name+" : "+ b1.money);
		
		interest= (long)(b2.money *Bank02.rate / 100);
		b2.money = b2.money +interest;
		System.out.println(b2.name+" : "+ b2.money);
		
	
		
	}//main
}//class

기대값

현재 이자율 적용되었습니다
공통이자율 : 2.5
통장개설 완료되었습니다!
이현땡고객님 : 102500
통장개설 완료되었습니다!
오쉬맨고객님 : 10250
3개월 이후 이자변동이 있습니다.
이현땡고객님 : 106087
오쉬맨고객님 : 10608

0개의 댓글