반응형

 

getter, setter

 

private의 경우 외부에서 사용이 불가하기에 우회하여 사용할 수 있는 getter, setter을 이용한다.

 

- setter : 데이터를 입력, 파라미터를 넣음

- getter : 데이터를 확인, 리턴 값이 존재

 

package kr.or.ddit.study06.sec06;

public class PrivateMain {
	public static void main(String[] args) {
		PrivateTest pt1 = new PrivateTest();
		// a가 private일 경우 아래와 같은 식은 불가능. - > get과 set을 사용해야함.
//		pt1.a = 10;
	}
}

 

package kr.or.ddit.study06.sec06;

public class PrivateTest {
	private int a;
	private int b;
	
	public int getA() {
		return a;
	}
	
	// 메소드를 사용하여 private의 값을 가져옴.
	// 문제가 생길 시 아래와 같이 검증하여 데이터를 집어 넣을 수 있음.
	public void setA(int a) {
		if(a < 0) {
			System.out.println("음수는 입력 안되요.");
		}
		this.a = a;
	}
	
	public int getB() {
		return b;
	}
	
	public void setB(int b) {
		this.b = b;
	}
}

 

 

package kr.or.ddit.study06.sec06;

public class Student {
	private int age;
	private String name;
	
	// public을 기입하지 않을 시 파일이 들어 있는 패키지에서만 가져올 수 있음
	public Student() {
		
	}
	
	Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	// 데이터을 입력할 때
	public void setAge(int age) {
		if(age<0) {
			System.out.println("음수는 입력 불가.");
		}
		this.age = age;
	}
	
	// 데이터를 가져올 때
	public int getAge() {
		return age;
	}
	
	// 데이터를 입력할 때 체크
	public void setName(String name) {
		if(name.length() > 4) {
			System.out.println("4자 이상의 이름은 입력이 불가능.");
			return;
		}
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

	@Override
	public String toString() {
		return "Student [age=" + age + ", name=" + name + "]";
	}
}

 

package kr.or.ddit.study06.sec06;

import java.util.Scanner;

public class StudentMain {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); 
		Student st1 = new Student();
		int age = sc.nextInt();
		st1.setAge(age);
		
		Student st2 = new Student();
		int age2 = sc.nextInt();
		st2.setAge(age2);
		
		String str = "김철수";
		str.length();
		
		System.out.println(st1.getAge());
		System.out.println(st2.getAge());
		System.out.println(str.length());
	}
}

 

결과 화면

 

 

package kr.or.ddit.study06.sec06;

public class Book {
	/*
	 * 책 이름, 저자, 출판일, 가격
	 */
	private String bookName;
	private String bookWriter;
	private String regDate;
	private int price;
	
	// 기본 생성자
	public Book() {
		
	}
	
	public Book(String bookName, String bookWriter, String regDate, int price) {
		this.bookName = bookName;
		this.bookWriter = bookWriter;
		this.regDate = regDate;
		this.price = price;
	}
	
	public String getBookName() {
		return bookName;
	}
	
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

	
	public String getBookWriter() {
		return bookWriter;
	}

	public void setBookWriter(String bookWriter) {
		this.bookWriter = bookWriter;
	}

	
	public String getRegDate() {
		return regDate;
	}

	public void setRegDate(String regDate) {
		this.regDate = regDate;
	}

	
	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
	
}

 

package kr.or.ddit.study06.sec06;

public class BookMain {
	public static void main(String[] args) {
		Book b1 = new Book();
		// set 데이터를 집어 넣음 | 파라미터 존재
		// get 데이터를 가져옴 | 파라미터 없음
		b1.setBookName("목소리들");
		b1.setBookWriter("이승우");
		b1.setRegDate("2023년 11월 30일");
		b1.setPrice(16000);
		
		Book b2 = new Book();
		b2.setBookName("목소리들");
		b2.setBookWriter("이승우");
		b2.setRegDate("2023년 11월 30일");
		b2.setPrice(16000);

		System.out.println(b1.getBookName() + ", " + b1.getBookWriter() + ", " + b1.getRegDate() + ", " + b1.getPrice());
	}
}

 

결과 화면2

 

 

package kr.or.ddit.study06.sec06;

public class Sing {
	/*
	 * 노래 가사 일부, 노래 제목, 가수.
	 */
	
	private String lyrics;
	private String title;
	private String singer;
	
	public Sing() {
		
	}
	
	public Sing(String lyrics, String title, String singer) {
		this.lyrics = lyrics;
		this.title = title;
		this.singer = singer;
	}

	public String getLyrics() {
		return lyrics;
	}

	public void setLyrics(String lyrics) {
		this.lyrics = lyrics;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getSinger() {
		return singer;
	}

	public void setSinger(String singer) {
		this.singer = singer;
	}
	
}

 

package kr.or.ddit.study06.sec06;

public class SingMain {
	public static void main(String[] args) {
		Sing s1 = new Sing();
		s1.setLyrics("가사1");
		s1.setTitle("제목1");
		s1.setSinger("가수1");
		
		System.out.println(s1.getLyrics() + ", " + s1.getTitle() + ", " + s1.getSinger());
		
	}
}

 

결과 화면3

 

 

package kr.or.ddit.study06.sec06;

public class Food {
	/*
	 * 음식 이름, 음식 설명, 조리시간
	 */
	private String foodName;
	private String foodExp;
	private int time;
	
	Food() {
		
	}
    
	// 생성자인데(or 메소드인데) 파라미터만 달라짐 -> 오버로딩
	Food(String foodName, String foodExp, int time) {
		this.foodName = foodName;
		this.foodExp = foodExp;
		this.time = time;
	}

	public String getFoodName() {
		return foodName;
	}

	public void setFoodName(String foodName) {
		this.foodName = foodName;
	}

	public String getFoodExp() {
		return foodExp;
	}

	public void setFoodExp(String foodExp) {
		this.foodExp = foodExp;
	}

	public int getTime() {
		return time;
	}

	public void setTime(int time) {
		this.time = time;
	}
}

 

package kr.or.ddit.study06.sec06;

public class FoodMain {
	public static void main(String[] args) {
		Food f1 = new Food();
		f1.setFoodName("음식이름");
		f1.setFoodExp("음식 설명");
		f1.setTime(3);
		
		System.out.println(f1.getFoodName() + ", " + f1.getFoodExp() + ", " + f1.getTime());
	}
}

 

결과 화면4

 

 

 

재귀 함수

 

: 나 자신을 다시 불러오는 함수

 

package kr.or.ddit.study06.sec04;

import java.util.Date;

public class Recrucive {
	public static void main(String[] args) {
		Recrucive rc = new Recrucive();
//		rc.call(10);
		
		System.out.println(rc.factorial(5));
		System.out.println(rc.fibo(3));
		
		Date d1 = new Date();
		Date d2 = new Date();
		
		System.out.println(d2.getTime() - d1.getTime());
	}
	
	/*
	 * 피보나치 수열
	 * 1 1 2 3 5 8 13 21 34
	 */
	// 아래와 같은 식으로 할 시 재귀함수의 속도가 느리다는 것을 보완할 수 있다. 
	long[] result = new long[100];
	public long fibo(int num) {
		if(num == 1) return 1;
		if(num == 2) return 1;
		long l = 0;
		if(result[num] == 0) {
			l = fibo(num-1) + fibo(num-2);
			result[num] = l;
		} else {
			l = result[num];
		}
		return l;
	}
	
	/*
	 * n을 입력후
	 * n * n-1 * n-2 ...... * 2 * 1
	 */
	public long factorial(long num) {
		if(num == 1) return 1; // 주석 시 stack Overflow Error 발생 => 종료 조건 필수
		return num * factorial(num-1);
	}
	
	// 재귀 함수
	// 메모리가 잘 커지기에 사용할 때 주의해야 함.
	public void call(int num) {
		if(num == 0) return;
		System.out.println("호출");
		call(num-1);
	}
}

 

결과 화면5

 

 

반응형