0627

이민규·2023년 7월 4일
0

SistMemoryNoteJava

목록 보기
4/9

Class

package day0627;

public class ExObject_01 {

	String name; //인스턴스 변수
	static final String MESSAGE="Happy Day!!!";	//static 변수
	
	public static void main(String[] args) {

	}
  • 인스턴스 변수+static(클래스) 변수 = 멤버 변수
  • 인스턴스 변수는 객체 생성 후 각각 다른 값으로 지정 가능
  • static 변수는 주로 상수 선언 시 사용하며(상수 변수는 대문자), 클래스명으로 접근 가능
  • 여러 객체가 같은 값을 공유할 경우 주로 static 변수 선언
//클래스명 참조변수명=new 클래스명();

	ExObject_01 ex1=new ExObject_01();
			System.out.println(ex1.name); //null

		ex1.name="김철수";
			System.out.println(ex1.name); //김철수
  • 생성 후 초기화 가능
package day0627;

public class Ex2Object_02 {

	String kind; //카드의 무늬
	int number; //카드의 숫자

	static int width; //카드의 폭
	static int heigth; //카드의 높이
  • 2개의 인스턴스변수,2개의 static(클래스)변수_4개의 멤버변수
package day0627;

public class Ex2Main_02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println(Ex2Object_02.width); //0
		System.out.println(Ex2Object_02.heigth); //0
		
		//클래스변수
		Ex2Object_02.width=10;
		Ex2Object_02.heigth=20;
		
		System.out.println(Ex2Object_02.width); //10
		System.out.println(Ex2Object_02.heigth); //20
		
		//인스턴스 생성후 변수 호출가능
		Ex2Object_02 card1=new Ex2Object_02();
		
		System.out.println(card1.kind); //null
		System.out.println(card1.number); //0
		
		card1.kind="Heart";
		card1.number=4;
		
		System.out.println(card1.kind); //Heart
		System.out.println(card1.number); //4
		
		//인스턴스 변수 생성후 변경후 출력
		Ex2Object_02 ins=new Ex2Object_02();
		
		System.out.println(ins.kind); //null
		System.out.println(ins.number); //0
		
		ins.kind="Diamond";
		ins.number=10;
		
		System.out.println(ins.kind);
		System.out.println(ins.number);
	}

}
  • 인스턴스 변수는 생성할 때마다 초기화 (누적 불가)
public class MemoryCnt_04 {

	static int count=0;
	int cnt=0;
	
	//생성자
	public MemoryCnt_04() {
		count++;
		cnt++;
		System.out.println("count="+count);
		System.out.println("cnt="+cnt);
	}
	
	public static void main(String[] args) {

		MemoryCnt_04 mem1=new MemoryCnt_04(); //count=1, cnt=1
		MemoryCnt_04 mem2=new MemoryCnt_04(); //count=2, cnt=1
	}
}
  • static 변수는 생성 시마다 누적, 인스턴스 변수는 생성 시마다 초기화
class ConstA {
	
	int num=0;
	
	//디폴트생성자
	public ConstA() {
		num=10;
		System.out.println("디폴트 생성자");
	}
	
	//인자있는생성자
	public ConstA(int num) {
		this.num=num;
		System.out.println("생성자 호출");
	}
	
	//메서드
	public int getNumber() {
		
		num=50;
		
		return num;
	}
}
  • 명시적인 생성자를 만들 시 디폴트 생성자는 자동생성 안됨
  • 메서드 command : public (입력값의 형태) get(참조변수명)( ) { }
  • 메서드 생성 시 void를 입력하지 않으면 반드시 return 필요
public class ConstTest_05 {

	public static void main(String[] args) {

		//디폴트생성자
		ConstA ca2=new ConstA();
		System.out.println(ca2.num);

		//명시적생성자(인자값으로 num을 보낸 생성자)
		ConstA ca1=new ConstA(30);
		System.out.println(ca1.num);
		
		//메서드 호출
		ConstA ca3=new ConstA();
		System.out.println(ca3.getNumber());
	}
}
  • 명시적 생성자는 인자값으로 출력값 변경가능

Setter & Getter 이용 (멤버값이 Private으로 설정 시)

class Student {
	
	private String name;//null
	private int age;//0
	
	//setter_method

	public void setName(String name) {
		this.name=name;
	}
	
	public void setAge(int age)	{
		this.age=age;
	}
	
	//getter_method

	public String getName()	{
		return name;
	}
	
	public int getAge()	{
		return age;
	}
}
////////////////////////////
public class SetGetMethod_07 {

	public static void main(String[] args) {

		//1.객체생성
		Student stu1=new Student();
		
		//2.참조변수명으로 set메서드호출
		stu1.setName("이민규");
		stu1.setAge(29);
		
		//3.get메서드를 통한 값얻기
		String name=stu1.getName();
		int age=stu1.getAge();
		
		//출력
		System.out.println(name+""+age); //이민규29
	}
}
  • setter메서드는 수정 용도이므로 인자값 존재, getter메서드는 호출 용도이므로 인자값 부재

  • setter 메서드는 저장, 수정용이므로 return 값 부재 (void 必)

  • getter 메서드는 실행결과를 돌려주므로 ‘return 결과값’으로 지정

  • 생성자 혹은 메서드의 멤버 변수와 매개변수의 이름이 동일할 시 this.(멤버 변수)=(매개변수) 와 같이 구분하여 사용 가능

  • 멤버 변수와 매개변수의 이름이 다를 경우 this. 사용 불필요

public class Info_08 {

	String stuName;
	int age;
	String addr;

//명시적 생성자
	public Info_08(String name,int age,String addr) {
		
		stuName=name;
		this.age=age;
		this.addr=addr;
	}
	//getter메서드
}
  • stuName(멤버 변수)와 name(매개변수)는 이름이 다르므로 그냥 대입 가능, but age와 addr은 멤버 변수와 매개변수의 이름이 같으므로 this. 로 구분하여 대입
  • 명시적 생성자는 생성과 동시에 멤버를 초기화 가능 (setter 메서드 대체 가능 but getter 메서드는 여전히 필요)
	public String getStuName() {
		return stuName;
	}
	
	public int getAge() {
		return age;
	}
	
	public String getAddr() {
		return addr;
	}
  • 위의 ‘getter메서드’에 들어가야할 코드
  • 메서드 설정에 void가 없으므로 return 값이 반드시 필요
  • return 값 command : return (결과값);
public class InfoMain_08 {

	public static void main(String[] args) {

	//출력
		Info_08 in1=new Info_08("karen", 29, "seoul");
				
		//getMethod 변수지정
		String name=in1.getStuName();
		int age=in1.getAge();
		String addr=in1.getAddr();
		
		System.out.println(name+""+age+""+addr);
}
  • 명시적 생성자의 초기값 설정으로 setter 메서드 대체
  • Default 생성자로 생성 후 출력 시 ‘null 0 null’ 출력 (인자값 없으므로)

연습문제(Private 변수 = Setter & Getter 사용)

public class Quiz_09 {

	//변수선언
	private static String place;
	//static String PLACE="이마트";
	private String mer;
	private int price;
	
	//set메서드
	public static void setPlace(String place) {
		Quiz_09.place=place;
	}
	public void setMer(String mer) {
		this.mer=mer;
	}
	public void setPrice(int price) {
		this.price=price;
	}
	
	//get메서드
	public static String getPlace() {
		return place;
	}
	public String getMer() {
		return mer;
	}
	public int getPrice() {
		return price;
	}
}
  • 모든 변수가 private으로 설정되어 setter, getter 메서드를 사용해야만 main method에서 수정, 호출이 가능하다
  • 주의 : static 변수를 setter와 getter 메서드를 통해 수정, 호출하려면 static 메서드로만 가능
  • setter의 경우 : public static void (set참조변수명)((입력값 형태) (매개변수)) { }
  • getter의 경우 : public static (입력값 형태) (get참조변수명)( ) { return (멤버 변수) } or public static void (get참조변수명)( ) { System.out.println((class명).(멤버 변수)) }
public class QuizMain_09 {

	public static void main(String[] args) {

		Quiz_09.setPlace("이마트");
		
		Quiz_09 smn1=new Quiz_09();
		smn1.setMer("손선풍기");
		smn1.setPrice(25000);
		
		Quiz_09 smn2=new Quiz_09();
		smn2.setMer("핸드폰충전기");
		smn2.setPrice(30000);
		
		Quiz_09 smn3=new Quiz_09();
		smn3.setMer("이어폰");
		smn3.setPrice(70000);
		
		//String place=smn1.getPlace();
		String place=Quiz_09.getPlace();
		
		String mer1=smn1.getMer();
		int price1=smn1.getPrice();
		
		String mer2=smn2.getMer();
		int price2=smn2.getPrice();
		
		String mer3=smn2.getMer();
		int price3=smn3.getPrice();
		
		System.out.println("[쇼핑목록]\n");
		System.out.println("쇼핑장소: "+place+"\n");
		System.out.println("목록1\n상품명: "+mer1+"\n가격: "+price1+"\n");
		System.out.println("목록2\n상품명: "+mer2+"\n가격: "+price2+"\n");
		System.out.println("목록3\n상품명: "+mer3+"\n가격: "+price3+"\n");
	}

}
  • static 변수는, 생성하여 호출도 가능( String place=smn1.getPlace( ); ) or class명으로 호출도 가능( String place=Quiz_09.getPlace( ); )
  • 인스턴스 변수와 달리 static 변수는 생성 없이 class명으로 다른 class에서 호출 가능

연습문제(Public 변수)

public class Quiz_10 {

	//멤버변수선언
	private String sangpum; //상품명
	int su; //수량
	int dan;//단가
	static String SHOPNAME; //상점
	
	public void setSangpum(String sp) {
		sangpum=sp;
	}
	
	public String getSangpum() {
		return sangpum;
	}
}
  • sangpum 변수만 private 설정되었으므로 해당 변수만 setter, getter 메서드 코딩, 나머지는 class명으로 호출
public class QuizMain_10 {

	public static void main(String[] args) {

		System.out.println("**상품입고**");
		
		Quiz_10.SHOPNAME="롯데마트";
		System.out.println("입고된 상점: "+Quiz_10.SHOPNAME);
		
		Quiz_10 smn1=new Quiz_10();
		smn1.setSangpum("딸기");
		smn1.dan=10000;
		smn1.su=5;
		
		Quiz_10 smn2=new Quiz_10();
		smn2.setSangpum("쵸코파이");
		smn2.dan=5000;
		smn2.su=10;
		
		Quiz_10 smn3=new Quiz_10();
		smn3.setSangpum("요거트");
		smn3.dan=2500;
		smn3.su=100;
		
		System.out.println(smn1.getSangpum()+"\n "+smn1.dan+"\n "+smn1.su+"\n");
		System.out.println(smn2.getSangpum()+"\n "+smn2.dan+"\n "+smn2.su+"\n");
		System.out.println(smn3.getSangpum()+"\n "+smn3.dan+"\n "+smn3.su+"\n");
	}
}
  • SHOPNAME 변수는 static 변수이므로 생성 없이 class명으로 수정, 호출 가능
profile
초보개발자

0개의 댓글