본문 바로가기

Language/Java 기본

생성자 및 접근제한자

 

Public : 누구나 접근 가능, 생략가능한데 생략하면 void show() 처럼 사용가능.

 

Private : 사적 접근, 내부 클래스에서만 접근가능 함

 

default : 같은 패키지 내의 클래스만 접근 함

 

protected : 같은 패키지에 있거나, 다른 패키지에서 상속관계에 있을 경우 접근 가능.

 

 

private는 밖에서 접근할 수 없게됨, 내부의 메서드를타면서만 접근 가능

 

private 접근 제한자 때문에 student2.xxx 식으로 접근할 수 없다.

 

 

Static : 정적인 의미로, 메모리에 고정적으로 변수 또는 메서드를 생성.

public "static" void main 

 

1.따라서 Static에는 모두가 필요로 하는 고정적인 공간임. [ 모든 기능에서 동시에 작용할 수 있는 변수들 ]

2. Static 키워드로 선언 시, 객체 생성 없이 클래스명.변수(or 메서드)로 사용 // Static을 잡을 경우, 메서드의 글꼴이 기울어짐

3. Static은 Super나 this 사용 불가

4. Static 메서드 내에 사용될 수 있는 외부변수나 메서드는 Static으로 선언되어 있어야 사용 가능

5. 즉, 모든 클래스, 모든 객체가 변수를 공유할 때 주로 사용하라.

 

 

 

생성자는 new라는 키워드로 선언된다. [객체가 생성될 때 실행된다.]

생성자는 생성되자마자 쓰여야하니 public을 사용하였다, 생성자는 반환타입[자료형]이 지정되지 않고

생성자(매개변수) 로 정의할 수 있다.

 

사실 이전에 이미 public student{ } 라는 생성자를 선언하였었는데

이것은 Student student1 = new Student() 에서 Student에 대한 매개변수를 모두 포함하고 있음을 의미한다.

우측과 같이 생성자의 요소를 제한하여 주면, 마찬가지로 new 를 통해 생성되는 생성자 메서드의

반환 자료형도 똑같이 지정하여야 한다. ("박광기", "913131", 22); 이때, 저 3가지의 값이 모두 충족해야만

객체가 생성된다고 할 수 있다.

 

또한 생성자도 오버로딩이 가능하다.

 

 

package Saaaa;

public class Student {

	private String name; // 이름 // private는 접근제한자,
	private String number; // 학번
	private int age; // 나이
	private int scoreJava; // 자바점수
	private int scoreWeb; // 웹점수
	private int scoreAndroid; // 안드로이드 점수

	public void show() {

		System.out.printf("\n%s,%d살", number, age);
		System.out.printf("\n%s 님의 Java점수는 %d 입니다.", name, scoreJava);
		System.out.printf("\n%s 님의 Web점수는 %d 입니다.", name, scoreWeb);
		System.out.printf("\n%s 님의 Android점수는 %d 입니다.", name, scoreAndroid);
		System.out.printf("\n◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");

	}

// 생성자 = new 라는 키워드를 사용해, 객체가 인스턴스화 되는 순간에 실행되는 메서드
// 생성자는 생성되자마자 쓰여야 하니 public 사용, 그리고 반환타입 지정 X, 즉, public 클래스명(요소) 가됨.  
// 생성자 특징, return 타입 지정할 수 없다. //  생성자를 새롭게 선언하는 순간 디폴트 생성자가 덮어씌워진다. // 기본생성자는 student()처럼 아무 매개변수가 없음
// 이것은 해당 클래스 내에서 모든 변수에 접근할 수 있게 하는것.,  이것을 아래 보이는 것처럼 작성하면 기본 생성자가 덮어씌워지게 된다. 이 경우, 생성자도 오버로딩이 가능하다.

	public Student(String name, String number, int age) {

		this.name = name; // this 로 클래스에서 지정한 변수 name 를 받아옴.
		this.number = number;
		this.age = age;

	}

// 각각의 점수를 입력할 수 있는 메서드를 생성
	// setter 메서드
	public void setScoreJava(int scoreJava) {

		if (scoreJava <= 100) {
			this.scoreJava = scoreJava;
		} else {
			System.out.println("잘못된 점수를 입력하셨습니다.");
		}
	}

	public void setScoreWeb(int scoreWeb) {

		if (scoreWeb <= 100) {
			this.scoreWeb = scoreWeb;
		} else {
			System.out.println("잘못된 점수를 입력하셨습니다.");
		}
	}

	public void setScoreAndroid(int scoreAndroid) {

		if (scoreAndroid <= 100) {
			this.scoreAndroid = scoreAndroid;
		} else {
			System.out.println("잘못된 점수를 입력하셨습니다.");
		}
	}

	// Getter 메서드
	public int getScoreJava() {

		return scoreJava;

	}

	public int getScoreWeb() {

		return scoreWeb;

	}

	public int getScoreAndroid() {

		return scoreAndroid;

	}
// public static 으로 쓰면, static 변수만 접근이 되고, 변하지 않는 값으로 선언됨
// 즉 , 객체에 대해 재선언 하면 재선언된 객체의 속성을 따라감
// 스태틱 변수는 선언되면 계속 같은 값을 가짐
}
package Saaaa;

import java.util.Scanner;

public class Special {
public static void main(String[] args) {
	
	
	
	Student student1 = new Student("박광기", "913131", 22);
	//Student student2 = new Student();
	Scanner sc = new Scanner(System.in);
	int sJ = sc.nextInt();
	student1.setScoreJava(sJ);
	int sW = sc.nextInt();
	student1.setScoreWeb(sW);
	int sA = sc.nextInt();
	student1.setScoreAndroid(sA);
	
	System.out.printf("%d,%d,%d",student1.getScoreJava(),student1.getScoreWeb(),student1.getScoreAndroid());
//	student1.getScoreJava();
//	student1.getScoreWeb();
//	student1.getScoreAndroid();

}
}

 

 

3개의 정수를 입력받고, 각각의 변수 자바, 웹, 안드로이드에 넣어주어야 하지만 각각의 점수를 가지는 변수가

접근제한자 private로 막혀있기 때문에 이에 입력값의 범위를 검사한뒤에야 변수의 데이터로 받아들일 수 있는

각각의 정수에 대한 public 메서드를 선언하며, 점수의 조회도 각 변수가 접근제한자로 막혀있기 때문에

public 접근제한자에 해당 변수의 데이터에 반환값을 돌려주는 형태로 사용하여 준다.

 

 

 

『생성자』

 

- 생성자는 메서드이다. -> 중복정의, 오버로딩 가능

- 생성자 이름은 클래스 이름과 동일

- 생성자는 리턴 타입을 지정할 수 없다.

- 생성자는 new를 통해 객체를 생성할 때만 호출된다.

 

생성자는 하나 이상 선언되어야 한다.

 -> 컴파일러에 의해 자동으로 생성되며

-> 기본 생성자 () 를 디폴트 생성자라고 한다.

 

클래스 키워드 / 필드  // 필드는 모든 초기값이 있음

 

생성자 -> 클래스 이름과 동일하게.

 

메소드  

 

이렇게 나뉜다.

 

@Override
public String toString() {
	return super.toString();
}

toString()은 객체 생성 시 내용을 보여주는 메서드이다.

본래 객체를 println 등으로 직접 조회하면 주소값이 나오는데 그것을 스트링형태로 보여준다.

 

@Override
public String toString() { 
	return memberName+", your id is"+memberId;


}

다음과 같이 toString을 지정하면

return 값으로 나오니

print 문을 통해 객체를 직접 지정하더라도

memberName + ", your id is"+memberID 와 같이 나온다.

 

for each 문은 클래스 변수명 : 객체명으로 어떤 배열 객체내의 크기만큼 

반복하는 것을 의미한다,

여기서 println에 mem 변수를 넣었는데 저렇게 출력되는 이유는

위에 리턴으로 String값을 저렇게 리턴해준다고 명시했기 때문이다.

 

 

 

 

 

'Language > Java 기본' 카테고리의 다른 글

JDBC 1  (0) 2021.01.11
상속과 다형성, 오버라이딩  (0) 2021.01.09
ArrayList  (0) 2021.01.08
메서드 오버로딩(Overloading)  (0) 2021.01.08
메서드 2  (0) 2021.01.08