JAVA

[JAVA] 생성자 / 접근제한자 / getter,setter

sian han 2022. 2. 22. 20:23

진짜 뒤질것같다 오늘꺼 개어렵다

머리에 들어온거 하나도없는데

일단 필기갈겨본다

뒤졌다

모조리 머리속에 넣어주마

 

 

클래스

 - 객체를 만들어 내는 설계도 

 - 행위, 기능(메서드) + 특성, 데이타(변수)

 - Object를 행위와 특성으로 바라보고 그것을 코드로 옮겨 놓은 것

 

▶클래스 디자인

 

[1] 클래스명 설정

     - class 이름 {

 

[2] 메소드 만들기

 

[1][2] 를 활용한

    덧셈, 뺄셈 계산기 클래스 디자인

class Calculator{
	public double add(double a, double b){	// 덧셈
		double d = a+b;
		return d;
	}

	public double subtract(double a, double b){	// 뺄셈
		return a-b;
	}

 

 

 

 

위에서 디자인한 클래스

    객체 생성 및 사용하기

 

 1. main 위쪽에 class 이름 설정

 2. 클래스명 이름 = new 클래스명(); 

    => Calculator ca = new Calculator();

 3. 결과값 받을변수 = 이름.메소드명(매개변수);

    => double result = ca.add(a, b);   (=ca 로 설정된 클래스에서 add 메소드를 가져오겠다)

public class CalculatorTest {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("두실수를 입력하세요");
		double a = sc.nextDouble();
		double b = sc.nextDouble();

		Calculator ca = new Calculator();
		double result = ca.add(a, b);
		
		System.out.println("a=" +a +",b="+ b);
		System.out.println("a+b = "+ result);

		result = ca.subtract(a, b);		
		System.out.println("a-b = "+ result);

 


 

※생성자(Constructor)

 - 멤버변수의 초기화를 목적으로 정의되는 메서드

 - 객체가 생성될 때 자동 호출되어 가장 먼저 실행되는 메서드

 

▶ 생성자가 되기 위한 조건

 - 클래스의 이름과 동일한 이름의 메서드

 - 매개변수는 가질 수 있으나 반환값은 가질 수 없다

 

객체 생성 문장에는 생성자 호출하는 부분이 존재함

    - 클래스명 변수명 = new 클래스명();

        ex ) Account acc = new Account(); 

            => new 의 오른편 부분이 생성자 호출하는 부분

 

 

기본생성자 (default 생성자) - 매개변수를 가지지 않는 생성자

 - 클래스내에 생성자가 하나도 없으면 컴파일러가 자동으로 기본생성자를 추가해줌

 - 하지만 다른 생성자가 있으면 컴파일러에 의해 기본 생성자가 만들어지지않음 ! 

 

▶ 기본생성자 특징

 - 클래스명과 동일한 이름 사용

 - 반환값도 없고, void 도 아님

 - 매개변수가 없음

 - 모든 필드를 0 (숫자필드), false(논리형), null(참조형)로 초기화

 

 

▽ 생성자 문법

class Account{
  	//생성자
  	Account(){
  	
  	}
  }

 

 

재정의 생성자 - 매개변수가 있는 생성자

 - 사용자가 임의로 다시만들어놓은 생성자

 

 

 

 

 

 

 

 

▶클래스 생성에 생성자 넣어보기

class Account{

 - 멤버변수 넣기

class Account{
	String accId;  	
	String name;	
	int balance

 - 기본생성자 추가 (매개변수 있는 생성자)

class Account{
	String accId;  	
	String name;	
	int balance;

	Account(){
		
		}

 - 메서드 만들기

class Account{
	String accId;  	
	String name;	
	int balance;

	Account(){
		
		}
        
        public void deposit(int money) { 
		balance += money;
			}
            
            public void showInfo() {
		System.out.println("계좌번호 : " + accId);
		System.out.println("이름 : " + name);
		System.out.println("잔액 : " + balance+"\n");		
	}

 - 객체생성

class Account{
	String accId;  	
	String name;	
	int balance;

	Account(){
		
		}
        
        public void deposit(int money) { 
		balance += money;
			}
            
            public void showInfo() {
		System.out.println("계좌번호 : " + accId);
		System.out.println("이름 : " + name);
		System.out.println("잔액 : " + balance+"\n");		
	}
    
 public class AccountTest {
	public static void main(String[] args) {
		Account acc2 = new Account();

 - 멤버변수사용

class Account{
	String accId;  	
	String name;	
	int balance;

	Account(){
		
		}
        
        public void deposit(int money) { 
		balance += money;
			}
            
            public void showInfo() {
		System.out.println("계좌번호 : " + accId);
		System.out.println("이름 : " + name);
		System.out.println("잔액 : " + balance+"\n");		
	}
    
 public class AccountTest {
	public static void main(String[] args) {
		Account acc2 = new Account();
      
      acc2.accId="100-001-2000";
		acc2.name="홍길동";
		acc2.balance=100000;

 - 메서드 사용

class Account{
	String accId;  	
	String name;	
	int balance;

	Account(){
		
		}
        
        public void deposit(int money) { 
		balance += money;
			}
            
            public void showInfo() {
		System.out.println("계좌번호 : " + accId);
		System.out.println("이름 : " + name);
		System.out.println("잔액 : " + balance+"\n");		
	}
    
 public class AccountTest {
	public static void main(String[] args) {
		Account acc2 = new Account();
      
      acc2.accId="100-001-2000";
		acc2.name="홍길동";
		acc2.balance=100000;
        
        acc2.deposit(30000);  //30000원 입금
		acc2.showInfo();

 

 

 

 

외전 ) 매개변수 있는 생성자

 - 생성자 추가

Account(String p_accId, String p_name, int p_balance){
		accId=p_accId;
		name=p_name;
		balance=p_balance;				
	}

 

 - 생성자 사용

Account acc = new Account("200-001-3000","김길동",200000);
		acc.showInfo();

 

 

 

 

 

▶클래스 생성에 생성자 넣어보기 또해보기

 - 원의 넓이 구하기

class Circle {
	int radius; 			// 멤버변수
    
    Circle(int p_radius){
		radius=p_radius;
	}                        //매개변수가 있는 생성자
    
    public double findArea() {
		double area = radius*radius*3.14;
		return area;
	}                         //메서드만들기
    
    public class CircleTest {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("반지름 입력!");
		int r = sc.nextInt();
		
        Circle c = new Circle(r);     // 객체생성
        double area=c.findArea();
		double girth=c.findGirth();    // 생성자를 이용해서 멤버변수의 값 초기화
        					=> 생성자 new Circle(r) 을 통해 
                                            변수 area 와 girth 에 값을 넣는다
                                            
        c.radius = 20;
		area=c.findArea();  		//멤버변수 값 변경도 가능

 

 

 

▶클래스 생성에 생성자 넣어보기 또또해보기

 - 직사각형 넓이 구하기

class Rectangle{
	double width, height;
    
    Rectangle(double w, double h){
		width = w;
		height = h;
	}
    
    public double findArea(){	
		return width * height;
	}
    
    public class RectangleTest {

	public static void main(String[] args) {
		System.out.println("사각형의 가로, 세로를 입력하세요");
		Scanner sc = new Scanner(System.in);
		double w = sc.nextDouble();
		double h = sc.nextDouble();
        
        Rectangle r = new Rectangle(w, h);
		double area = r.findArea();
		double girth = r.findGirth();
        
        System.out.println("사각형의 넓이 : " + area);
      }
    }

 

 

 


※접근 제한자 (접근 제어자)

 - 멤버나 클래스에 사용되어, 외부에서 접금하지 못하도록 제한하는 역할 (데이터를 보호하기위해)

 - 클래스 내부의 멤버를 노출하거나 숨길 때 사용

 

★★★★★

private - 같은 클래스 내에서만 접근 가능

default (생략형) - 같은 패키지 내에서만 접근 가능

protected - 같은 패키지는 물론 다른 패키지일지라도 상속관계가 있으면 접근가능

public - 어디서나 접근 가능

 

 

private < default < protected < public

 

Q. 접근 제어자가 사용될 수 있는 곳은? - 클래스, 멤버변수, 메서드, 생성자

 

클래스 - public, default 만 사용 가능
메서드, 멤버변수 - public, protected, default, private
지역변수 - 사용불가  

 

~보통~

클래스 - 일반적으로 멤버변수는 외부에 대해 숨기고, 대부분의 메서드노출

               ▽

  멤버변수private으로 선언

     - private인 멤버변수의 값을 가져오거나 변경하기 위해서 getter/setter 만들어 사용

  메서드는 - public으로 선언

 

 

 

 

※getter / setter

 - private 으로 선언되어 접근할 수 없는 멤버변수의 값을

   get ~(), set ~() 메서드를 만들어 값을 가져오거나 변경한다.

 - 멤버변수 하나당 한 쌍의 get~(), set~() 메서드 필요

 

 

 

▶getter / setter 쓰임새 알아보기

 

- 멤버변수가 private 으로 선언됨

class Man{	
	private int age;
	int height;

 - get 이용하여 age 멤버변수의 값 읽기

public int getAge() {  
		return age;
	}

 - set 이용하여 age 멤버변수 값 수정하여 저장하기

   - setter 는 무조건 void ! 

public void setAge(int p_age) { 
		age=p_age;
	}

 - setter 를 이용한 멤버변수의 값 변경

 - getter 를 이용해 값을 읽어오기

public class ManTest {
	public static void main(String[] args) {
		Man m = new Man();
		m.height=180;
		//m.age=20;  //error
		m.setAge(20);  //setter이용해서 값을 저장
				
		System.out.println("키 : "+ m.height);
		System.out.println("나이 : "+ m.getAge()); //getter이용해서 값을 읽어온다

 

▽위의 과정 하나로 합치기

package com.day12;

/*
  멤버변수 - private으로 선언
  메서드 - public으로 선언
  멤버변수의 값을 가져오거나 변경하기 위해서 getter/setter 만들어 사용
*/

class Man{	
	private int age; //20
	int height;  //180
	
	public int getAge() {  //읽기
		return age;
	}
	
	public void setAge(int p_age) {  //쓰기, 저장
		age=p_age;
	}
}

public class ManTest {
	public static void main(String[] args) {
		Man m = new Man();
		m.height=180;
		//m.age=20;  //error
		m.setAge(20);  //setter이용해서 값을 저장
				
		System.out.println("키 : "+ m.height);
		//System.out.println("나이 : "+ m.age); //error
		System.out.println("나이 : "+ m.getAge()); //getter이용해서 값을 읽어온다
				
	}

}

 

 

 

 

 

▶getter / setter 쓰임새 하나 더 보기

class Triangle3{
	private int width; 
	private int height;
    
    	Triangle3(int p_width, int p_height){
		width=p_width;
		height=p_height;				
	}
    
    public int getWidth() {
		return width;
	}                              //getter 이용width 값 가져오기
	
	public void setWidth(int w) {
		width=w;
	}                             // setter 이용 width 값 다시쓰기
	
	public int getHeight() {
		return height;
	}                             //getter 이용 height 값 가져오기
	
	public void setHeight(int h) {
		height=h;
	}					 /// setter 이용 height 값 다시쓰기
    
    
    //메서드
    public double findArea() {
		return width*height/2.0;
	}
    
    
 public class TriangleTest5 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("밑변, 높이 입력!");
		int w=sc.nextInt();
		int h=sc.nextInt();
		
		//(1) 생성자를 이용한 멤버변수 초기화
		Triangle3 tr = new Triangle3(w, h);  
		double area=tr.findArea();
		
		System.out.println("\n면적:"+ area);
		
		//(2) setter를 이용한 멤버변수의 값 변경
		tr.setWidth(30);
		tr.setHeight(40);
		
		System.out.println("\n\n변경한 밑변 : " + tr.getWidth());
		System.out.println("높이 : " + tr.getHeight());
		System.out.println("삼각형 면적 : " + tr.findArea());
		
	}

}

 

 

 

'JAVA' 카테고리의 다른 글

[JAVA] 클래스배열  (0) 2022.02.24
[JAVA] Static  (0) 2022.02.23
[JAVA] 객체와 클래스  (0) 2022.02.21
[JAVA] 배열  (0) 2022.02.19
[JAVA] 오버로딩 / 재귀호출 메서드 생성 / Math.random  (0) 2022.02.18