Back-End/Java

[java] 접근지정자

LeeGangEun 2022. 2. 7. 17:58

접근 지정자란?

접근 지정자는 클래스혹은 클래스내의 멤버앞에 붙어서 다른 클래스의 접근을 제한하는 역할을 한다.

객체를 캡슐화하기 때문에, 객체에 다른 객체가 접근하는 것으로 허용할지, 말지를 지정할 필요가 있다.

  • public : 모든 접근 허용, 어떠한 클래스가 접근을 하던 모두 허용
  • protected : 같은 패키지와 상속받은 클래스, 클래스 내부에서만 접근 가능
  • default : 기본 지정자, 접근 지정자를 명시하지 않을 시 적용 됨, 같은 패키지와 클래스 내부에서만 접근 가능
  • private : 외부에서는 접근이 불가능, 클래스 내부에서만 접근 가능

------------------강사님 강의 메모 ------------------------

접근지정자
static - 정적, 실행전, 변화가 없다, 미리 준비됨
dynamic - 동적, 실행시(run-time), 변화가 있다, 미리준비되지 않음
-----------------------------------------------------------------------------------------
객체지향에서는
1. 클래스를 만들고
2. 클래스를 이용해서 인스턴스를 만들고
3. 인스턴스를 사용해서 코딩 진행
=> static은 인스턴스를 만들지 않고도 사용할 수 있게 해준다.
------------------------------------------------------------------------------------------
setter는 private 멤버변수를 대신 수정하는 메서드
getter는 private 멤버변수를 대신 읽어오는 메서드

 

 

-----------------------------7일차 연습문제 ---------------------------------

 

1. 5명의 학생을 저장하는 Student 배열을 만들어서 이름과 점수를 입력하고 출력하기.

import java.util.Scanner;

class Studentz {
		
		String name;
		int korea = 0, 
			english =0, 
			math =0;
		
		public Studentz(String name, int korea, int english, int math) {
			this.name = name;
			this.korea = korea;
			this.english = english;
			this.math = math;
		}
		public double getAvg() {
			return (korea + english + math) /3 ;
		}
}
public class Quiz_07_01 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Studentz[] stu = new Studentz[5];
		
		for(int i=0; i<stu.length; i++) {
			System.out.println("이름  국어 영어 수학 점수를 차례대로 입력하세요 ");
			String name = sc.next();
			int korea = sc.nextInt();
			int english = sc.nextInt();
			int math = sc.nextInt();
			
			stu[i] = new Studentz(name, korea, english, math);
		}
			System.out.println("=======================================");
			
		for(int i=0; i<stu.length; i++) {
			System.out.println (stu[i].name +"학생\n" + "국어 :" + stu[i].korea +"\n" +"영어 :" + stu[i].english+"\n" +"수학 :"+ stu[i].math +"\n");;
			
			sc.close();
		}		
}
}

2. 마우스 클래스를 생성하시오(왼쪽버튼, 오른쪽버튼, mouseMove() )

class Mouse{
	public String name;
	private int a;
	private int b;
	public void leftmouse() {System.out.println("왼쪽 버튼입니다.");}
	public void rightmouse() {System.out.println("오른쪽 버튼입니다.");}
	
	public void setName(String name) {
		this.name = name;
		System.out.println(name);
	}
	public void setMove(int a, int b) {
		this.a = a;
		this.b = b;
	}
	public void MouseMove() {
		System.out.println("(" + a + "," + b + ")");
	}
}
		
public class Quiz_07_2 {
	public static void main(String[] args) {
		Mouse mouse = new Mouse();
		mouse.setName("기본마우스");
		mouse.setMove(10, 5);
		mouse.leftmouse();
		mouse.rightmouse();
		mouse.MouseMove();
	}
}

3. 휠마우스 클래스를 마우스클래스를 상속받아서 생성하시오(스크롤휠 추가)

class MouseWhell extends Mouse{
	public void scroll() {System.out.println("스크롤휠 입니다.");}
}
	
public class Quiz_07_3 {
	public static void main(String[] args) {
		MouseWhell mw = new MouseWhell();
		mw.setName("휠마우스");
		mw.leftmouse();
		mw.rightmouse();
		mw.scroll();
		mw.setMove(33, 22);
		mw.MouseMove();	
	}
}

4. 3버튼 마우스 클래스를 휠마우스 클래스를 상속받아서 생성하시오(버튼 추가)

class ThreeBtnMouse extends Mouse{
	public void Threebtn() {System.out.println("3버튼을 눌렀습니다.");}
}

public class Quiz_07_4 {

	public static void main(String[] args) {
		
		ThreeBtnMouse tbm = new ThreeBtnMouse();
		tbm.setName("3버튼 마우스");
		tbm.leftmouse();
		tbm.rightmouse();
		tbm.Threebtn();
		tbm.setMove(3234, 2123);
		tbm.MouseMove();
	}

}

5. 2~4번의 인스턴스를 생성하시오.

public class Quiz_07_5 {

	public static void main(String[] args) {
		
		ThreeBtnMouse tbm = new ThreeBtnMouse();
		tbm.setName("3버튼 마우스\n");
		
		MouseWhell mw = new MouseWhell();
		mw.setName("휠 마우스\n");
		
		Mouse mouse = new Mouse();
		mouse.setName("기본 마우스\n");
	}

}