0111 Java lec05 chap06[클래스]메소드+인스턴스멤버와 정적멤버 (singleton)+패키지와 접근 제한자 p268~307
리턴값이 없는 메소드:void
void powerOn(){} void 메소드에서 return을쓰면 값을 돌려줄게없기때문에 break와 동일한 역할을 함
return은 대입연산자없이 반환함 ex) return; return x+y;그냥 한칸띄우고씀
★메소드안에 메소드를 만드는건 안되지만 만들어놓은 메소드를 메소드안에서 실행하는건 가능함.
★메소드선언과 생성자만드는건 다르다.
public Q04(){ //기본생성자
}
public Q04(String title) { //매개변수가1개인 생성자
this.title= title;
}
public Q04(String title,String content) { //매개변수가2개인 생성자
this.title= title;
this.content = content;
}
Q04 q1 = new Q04(); //기본생성자를 통한 객체생성
q1.notice = "게시판";
q1.title = "제목";
q1.content = "내용";
q1.writer = "글쓴이";
q1.date = "작성일";
System.out.println(q1.toString());
Q04 q2 = new Q04("제목"); //매개변수가 1개인 생성자를 통해 객체생성
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int println(int x){ // 메소드선언형태
int a = x;
System.out.println(a);
return a;
}
String println(message){
System.out.println(message);
}
메소드 선언 형태 = 리턴타입 + 메소드명(){}
리턴타입 = 실수타입 정수타입 + 짓고싶은 메소드명
필드생성자메소드를 합쳐서 클래스 멤버라고함 (클래스의 구성원이기 때문에)
★정적static은 클래스or 라이브러리에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말함.
static 타입 필드 [=초기값] //정적필드
static 리턴 타입 메소드 ( 매개변수 선언, ...){..... }
정적멤버사용
클래스.필드 (객체사용없이 바로 클래스에서 불러오는것;)
클래스.메소드 (매개값,...)
Cal.pi //정적멤버를 사용하면 라이브러리(다른패키지의 클래스)를 이용해 바로 사용가능
정적메소드 선언시 객체없어도 실행되기때문에 이들 내부에 인스턴스 필드나 인스턴스메소드를 사용할수없음.
final 타입 필드 [= 초기값]; 초기값이 저장되면 최종적인값이되어서 프로그램실행도중에 수정할수없게됨
상수 = static final임 (무조건 대문자임)
클래스의 접근제한자
public 외부클래스가 자유롭게사용할수있음.
protected 같은패키지 또는 자식클래스에서 사용할수있도록함
default 같은 패키지에 소속된 클래스에서만 사용가능
private 외부에서 사용불가
생성자의 접근제한자 297p
public 모든패키지에서 아무런 제한 없이 생성자를 호출할수있도록함.
protected 1.같은패키지의 클래스에서 생성자 호출가능 2. 다른패키지-클래스-해당클래스의 자식 클래스면 생성자를 호출 가능
default 같은 패키지에 속하는 클래스에서 생성자를 호출가능
private 오직 클래스 내부에서만 생성자를 호출할 수 있고 객체를 만들수있음.
필드와 메소드의 접근제한자
public 모든패키지에서 아무런 제한 없이 필드와 메소드를 사용할수있도록함.
protected 1.같은패키지의 클래스에서 필드와 메소드 사용가능 2. 다른패키지-클래스-해당클래스의 자식 클래스면 필드와 메소드 사용 가능
default 같은패키지의 클래스에서 필드와 메소드 사용가능
private 오직 클래스 내부에서만 필드와 생성자 사용가능
Getter와 Setter메소드 page301~302
일반적으로 객체지향프로그래밍에서는 객체의 필드를 외부에서 직접적으로 접근하는것을 막음.
ex) 자동차의 속력이 음수가 될 수 없는데 외부에서 음수로 변경하면 객체의 무결성이 깨짐
이러한 문제해결을 위해 메소드를 통해서 필드를 변경하는방법을 선호
즉 필드는 외부에서 접근못하도록 접근제한자같은것을 통해 막고 메소드는 공개해서 외부에서 메소드를 통해 필드에 접근하도록 유도함.
이 때 이러한 역할을 하는 메소드가 Setter ( 매개값을 검증해서 유효한 값만 객체의 필드로 저장)
Getter 는 외부에서 객체의 데이터를 읽을 때도 메소드를 사용하는것이 좋은데 이런 경우 메소드로 필드값을 가공한 후 외부로 전달하는역할
Q03 MemberService + Test
package ex05;
public class MemberService {
boolean login(String id,String pass){
if(id == "hong" && pass == "12345") {
return true;
}else {
return false;
}
}
void logout(String id) {
if(id == "hong"){
System.out.println("로그아웃 되었습니다.");}
}
}
package ex05;
public class MemberServicTest {
public static void main(String[] args) {
MemberService m = new MemberService();
boolean result = m.login("hong", "12345");
if(result = true) {
System.out.println("로그인 되었다.");
m.logout("hong");
}else {
System.out.println("id , pass 제대로 입력해라");
}
}
}
Q04 Page269
package ex05;
public class Printer {
int println(int x){
int a = x;
System.out.println(a);
return a;
}
void println(boolean x) {
x = true;
System.out.println(x);
}
double println(double x){
double a = x;
System.out.println(a);
return a;
}
String println(String name){
String s = name;
System.out.println(s);
return s;
}
}
package ex05;
public class PrinterTest {
public static void main(String[] args) {
Printer p = new Printer();
p.println(10);
p.println(true);
p.println(5.7);
p.println("홍길동");
}
}
Cal + CalTest Page275
package ex05;
public class Cal {
static double pi = 3.14; //정적멤버 더블타입 필드
static int plus(int x,int y) { //정적멤버 인트타입 메소드
return x+y;
}
static int minus(int x, int y) { //정적멤버 인트타입 메소드
return x-y;
}
}
package ex05;
public class CalTest {
public static void main(String[] args) {
int a = Cal.minus(10, 5);
System.out.println(a);
Cal aa = new Cal();
int b = aa.minus(10, 5);
System.out.println(b);
//위는 static을 써서 클래스에서 바로 땡겨온거고 아래는 aa 기본생성자객체를 만들어서 객체를통해 땡겨오는거임
minus(10, 5);
plus(10,5);
}
static int plus(int x, int y) { //정적멤버 인트타입 메소드
return x+y;
}
static int minus(int x, int y) { //정적멤버 인트타입 메소드
return x-y;
}
}
대표적 싱글톤 클래스, 정적 멤버들을 가지고 있는 클래스
접근제한자 Page293
package ex06;
public class Accesstest {
//private < default < protected < public
// private
// private 붙은 변수,메소드는 해당 클래스에서만 접근가능
//
// default
// 접근 페이지가 없는 변수,메소드는 default 접근 페이지가 생략되어있는것 해당 패키지 내에서만 접근가능
//
// protected
// protected 붙은 변수,메소드는동일 패키지내의 클래스 또는 클래스 상ㅅㄱ받는 외부패키지의 클래에 접근 가능하다.
//
//
// public
// public 붙은 변수,메소드는 어떤 클래스에서도 접근가능
}
301 Getter와 Setter메소드