* 4-3 계속 봐야할거 어려움 ㅠ :
static,final,public,private
메소드 : void,자료형 메소드(String,int..등-return 꼭 필요 )
⚡ 지역변수,전역변수
* final int b =100; // 변수 선언시 final로 선언 : 더이상 값 변경을 못함
* static int c=1; //해당 변수를 메모리에 저장시켜놓음 초기화 x
package oop; import java.util.Scanner; public class method1 { public static void main(String[] args) { //새로운 클래스를 지속적으로 호출함 : 스레드 //static 사용시 메모리를 3번 저장함(그때그때 계속 저장) method1_box mbox1 = new method1_box(); //mbox1 : 객체명 mbox1.abc(); method1_box mbox2 = new method1_box(); //class 새로 load / mbox1,mbox2,mbox3 따로놈 mbox2.abc(); method1_box mbox3 = new method1_box(); mbox3.abc(); } } //여기서 변수 선언해봣자 의미 x , class와 method안에서만 먹힘 class method1_box { //field 영역 - 라이브러리,배열,변수(상수,메모리) 선언가능 String user; //전역변수 int a =10; final int b =100; static int c=1; //해당 변수를 메모리에 저장시켜놓음 초기화 x int d=1; //field에서 scanner를 선언(전역변수),작동 안하는 상태 //가볍게 사용 가능,여러 메소드에서 활용 가능 Scanner sc = null; public void abc() { //method this.user = "홍길동"; //전역변수 String user2 = "이순신"; //지역변수 int a = 30; //this.b = 500; //에러 (b 변수 선언시 final로 선언 : 더이상 값 변경을 못함) this.c++; this.d++; System.out.println(this.c); System.out.println(this.d); this.def(); } public void def() { //method //System.out.println(this.user); //System.out.println(this.a); // 10출력 //System.out.println(this.user2); //에러 : user2가 지역변수라서 this.sc = new Scanner(System.in); System.out.println("아이디 입력 : "); String mid = this.sc.next(); System.out.println(mid); } }
⚡ 외부 클래스 변수값 가져오기 및 변경(public,private)
static은 static만 this로 가져올 수 있음
private : 해당 클래스에서만 사용 및 변경 가능(보안 good)
package oop; //외부 클래스 변수값 가져오기 및 변경(public,private) public class method2 { //String user = null; static String user = null; //로그인 사용명(메모리에 장소 설정) //main 메소드는 기본으로 메모리 영역을 무조건 사용한다. public static void main(String[] args) { //this.user = "홍길동";// 일반 변수로 선언 하면 에러 : static은 static만 this로 가져올 수 있음 //위에서 static으로 선언하고 user="홍길동"; //이렇게 써줘야함(메모리에 등록된 전역변수 값을 입력) method2_box mb2 = new method2_box(); //메모리 영역은 로드를 따로 해줘야함 mb2.aaa = 500; //외부 클래스 필드에 있는 전역변수 값을 변경 // mb2.bbb = 25000; //에러 : 하단에서 private을 선언한 전역변수 //(private은 외부에선 접근 불가,해당 클래스 안에서만 사용 할 수 있음) mb2.abc(); //mb2.zzz(); //에러 : zzz 메소드는 private이라서 abc를 거치진 않고서 호출할 수 없다 } } class method2_box{ public int aaa = 100; //일반 전역변수 private int bbb = 1000; private void zzz() { //얘는 main에서 강제로 호출못함 System.out.println("내부 보안 메소드.."); } public void abc() { //public class에 있는 메모리 영역의 변수값을 일반 변수에 등록 String aaa = new method2().user; //method2 md = new method2(); //String aaa = md.user; 이렇게 써도 됨 this.bbb = 50000; System.out.println(aaa); System.out.println(this.aaa); //500출력(main 메소드에서 500으로 변경,원래는 100출력) System.out.println(this.bbb); //50000출력 (내부에서는 값 변경 가능 - private) } }
⚡ 메소드 정의(void, 자료형 + return)
return은 하나의 변수만 사용
package oop; //메소드 정의(void, 자료형 + return) public class method3 { public static void main(String[] args) { method3_box mth3 = new method3_box(); //mth3.abc(); //자료형 메소드에 인자값을 보낸 후 결과값을 변수로 돌려받음(자료 형테 같아야함) String result = mth3.bbb("hong"); System.out.println(result);//return으로 온 결과값을 출력 - hong@nate.com 출력 int sum = mth3.ccc(100,5); //두개의 인자값 전달 System.out.println(sum); //호출한 class method로 다시 결과값 반환-500출력 } } class method3_box { // void 메소드 : 메소드 호출시 산술,연산,결과,실행 등을 출력하는 담당 public void abc() { System.out.println("abc void 메소드"); } // 문자 자료형 메소드-기본(무조건 return이 있어야함) public String bbb(String id) { String email = "hong@nate.com"; //신규 변수 생성 및 데이터값 return email; //return을 이용하여 다시 값을 반환함 } //정수 자료형 메소드-기본 public int ccc(int a,int b) { int c = a*b; return c; //무조건 return값 있어야함; } //메모리 영역에 등록되는 메소드 (return 작성 x - void가 있기 때문) public static void ddd() { } //메모리 영역에 등록되는 문자 자료형 메소드 public static String eee() { return null; } }
⚡ class 안에 class(부모 클래스 + 자식클래스)
- 실무자 많이사용
package oop; //class 안에 class(부모 클래스 + 자식클래스) - 실무자 많이사용 public class method5 { public static void main(String[] args) { parents pr = new parents(); //부모 클래스 먼저 로드 pr.zzz(); //부모 클래스 안의 메소드 호출 parents.child pc = pr.new child(); //자식 클래스 로드 pc.abc();//자식 클래스 안의 메소드 호출 } } class parents { //부모 클래스 public String a = "홍길동"; //부모 필드의 전역변수 public void zzz() { System.out.println("부모 클래스에 있는 zzz 메소드"); } class child2 { } class child { //자식 클래스 public int gugu = 50; //자식 필드의 전역변수 public void abc() { //자식클래스 안의 method //parents.this.a : 부모 필드에 있는 전역변수값 로드 System.out.println("자식 클래스에 있는 abc 메소드 " + parents.this.a); System.out.println(this.gugu); //자식 필드에 있는 전역변수값 로드 : 50 } } }
⚡ 응용문제 (+선생님 풀이)
사용자가 웹 사이트에 접속 ->
메인화면 : html,css,javascript,React,ajax.Java,Databse,XML ...
(메모리 쓰는 것 : javascript,React,ajax.Java,Database)
javascript,React : 정적 메모리
Java : 정적 메모리,동적 메모리 둘다 사용
Ajax : 동적 메모리
Database : 정적 메모리
=>메모리는 꼭 필요한 곳에만 쓰는게 좋다!
package oop; import java.util.Scanner; /* 응용문제 외부 클래스를 이용하여 사용자가 하나의 숫자값을 입력합니다. 입력된 값이 짝수인지 홀수인지 확인하는 return 메소드 코드를 작성하시오. [결과] 숫자 하나를 입력하세요: 27 입력하신 결과는 홀수입니다. */ public class method6t { public static int no; //메모리에 값이 올라가 있음 public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("숫자를 입력하세요 : "); no = sc.nextInt(); method6_box mb = new method6_box(); String result = mb.ck(); //return 결과값을 받는 변수 System.out.printf("%d는 %s",no,result); //최종 출력 sc.close(); } } //this는 외부 클래스에서 활용 class method6_box { //전역변수에 메인 클래스에 있는 메모리 변수값을 로드(이게 메모리 쓸 줄 아는 방식..) public int user = new method6t().no; public String msg = ""; public String ck() { if(this.user % 2 == 0) { this.msg = "짝수값입니다"; }else { this.msg = "홀수값입니다"; } return this.msg; } }
'CLASS > JAVA' 카테고리의 다른 글
#5-2 / 2차 원시 배열 (0) | 2024.05.07 |
---|---|
#5-1 / 1차 원시 배열 (0) | 2024.05.07 |
#4-2 / Scanner + 더블반복문,선택문 (0) | 2024.05.03 |
#4-1 / Scanner + 반복문 (0) | 2024.05.03 |
#3-3 / library(Scanner) (0) | 2024.05.02 |