Public : 누구나 접근 가능, 생략가능한데 생략하면 void show() 처럼 사용가능.
Private : 사적 접근, 내부 클래스에서만 접근가능 함
default : 같은 패키지 내의 클래스만 접근 함
protected : 같은 패키지에 있거나, 다른 패키지에서 상속관계에 있을 경우 접근 가능.
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 |