본문 바로가기
학원수업/12월

12/02 국비교육 자바수업 5회차(캡슐화, parseInt, Wrapper class)

by 코딩마스터^^ 2022. 12. 2.

 

main메소드 앞에 먼저 출력되는 메소드도 있다.

static메소드!!

유일하게 메인보다 먼저 출력된다.

메인 메소드 보다 우선순위가 높다.

많이 사용하면 오버플로우가 일어나서 서버에 부담을 주니 2년차 미만은 아예 쓰지 말라는 프젝도있다고...

 

생성자

클래스의 모듈화 / 컴포넌트화

재사용성 높여주고 통합성 높이는 클래스 설계가 가능하다

 

  //메인 쓰레드라고 한다
  //메인은 엔트리 포인트이다
  //메인은 개발자가 호출하는 메소드가 아니다
  //시스템이 자동으로 호출해준다--콜백메소드
 
캡슐화

private으로 선언된 변수는 클래스 외부에서 사용이 불가하다.

 

this.

this가 붙을수있는변수는 전변이다.

this.전역변수

 

setter메소드를 통해서 전역변수를 초기화한다.

전변 mem_id를 초기화한다.

 

캡슐화해서 정보은닉한것을 쓰려면 getter를 써야한다.

package dev_java.ch01;

//자료구조의 일부로 사용함
//회원정보를 관리하기위한 목적으로 설계하였다. 그래서 메인메소드는 필요없다
public class MemberVO {
  private String mem_id = null;
  private String mem_pw = null;
  private String mem_name = null;

  public String getMem_pw() {
    return this.mem_pw;
  }

  public void setMem_pw(String mem_pw) {
    this.mem_pw = mem_pw;
  }

  public String getMem_name() {
    return this.mem_name;
  }

  public void setMem_name(String mem_name) {
    this.mem_name = mem_name;
  }

  // setter는 write, save
  public void setMem_id(String mem_id) {
    this.mem_id = mem_id;
  }

  // getter는 듣기, read의 느낌
  public String getMem_id() {
    return mem_id;
  }

  public static void main(String[] args) { // static 이 없으니까 인스턴스화를 한다. 같은 클래스라도. 같은 클래스 내에서는 프라이빗 사용가능
    MemberVO memberVO = new MemberVO();
    System.out.println(memberVO.mem_id);
  }

}
package dev_java.ch01;

public class MemberVOMain {

  public static void main(String[] args) {
    MemberVO memberVO = new MemberVO();
    String 사용자가입력한아이디 = "tomato";
    System.out.println(사용자가입력한아이디);
    //
    memberVO.setMem_id(사용자가입력한아이디);

    memberVO.setMem_id("tomato");// 파라미터에 값을 넣기위해 적은거임
    String id = memberVO.getMem_id();
    System.out.println(id);
    System.out.println(memberVO.getMem_id());

    memberVO.setMem_name("이순신");//setter메소드를 호출 하는것 만으로도 초기화 됨
    System.out.println(memberVO.getMem_name());//이순신 출력
    memberVO.setMem_pw("123");
    System.out.println(memberVO.getMem_pw());


  }
  // mem_name의 경우 접근제한자를 public으로 했으므로 직접 초기화가 가능하다.
}

만일 setter메소드를 호출하지 않으면 null이 출력될것임

getter메소드를 호출하면 전변인 mem_pw값출력

 

문제 memberInsert 메소드를 호출하시오.
 
package dev_java.ch01;

public class MemberAction {
  //회원가입성공 1반환 회원가입 실패하면 0을 반환한다 그렇다면 회원가입을 처리하는 메소드의 리턴타입은 무엇으로해야되나?
  public int memberInsert(String mem_id, String mem_pw, String mem_name){
    System.out.println("memberInsert호출-파라미터3개");
    int result =-1;
    return result;

  } 

  public int memberInsert(MemberVO memberVO){
    System.out.println("memberInsert호출-파라미터1개");
    int result =-1;
    return result;

  }
  public static void main(String[] args) {
    //insert here-memberInsert 메소드를 호출하시오.
    }
    
    }

소유주=주소번지=인스턴스 변수

 

연습문제 풀기

 

java.lang폴더가 아닌 다른 폴더를 컴파일 하려면

반드시 import를 해야한다.

자바 가상머신이 찾게 해야된다.

예제6 

system.in--->입력장치이므로 반드시 있어야됨

그 주소번지를 가지고 해당하는 메소드를 호출할수잇다

 

+1 : 문자타입일때 붙여쓰기가 된다.....?

string을 넣고 int가 나오게하고싶다

parseInt(string ) : int

parseInt메소드는 자바 api에 있다.----->대문자 주의

 

//java.lang패키지 외 클래스들은 모두 import문을 추가해야된다. 클래스 생성안됨
//-하지않으면 컴파일 에러

임포트문 추가

import java.util.Scanner;

명사형의 다른말은 필드

동사형

메소드 

클래스의 구성요소 두가지-함수형 프로그래밍 처리 방법-람다식지원-일급함수-일급객체

필드와 메소드=>클래스에 대한 정의 

클래스를 인스턴스화 하면 메모리에 로딩이 된다. = 램에 상주한다.

변수와 메소드를 호출하기 위해 인스턴스화한다.

인스턴스화.메소드명(int i); ---->.(닷)연산자를 쓴다

인스턴스화.메소드명(int i, double d , .....);

인스턴스화.전역변수(원시형+참조형);// 두가지 모두 다 부를 수 있다.

 

static정리

static은 하나이다. 원본을 공유하는것이다.

500명의 주소번지가 다 다르다....

복제본을 만들어야 한다.

복제본=인스턴스

static<=>non-satatic 

 

가장 가까운 부모를 상속 받는것이 가장 유리하다.

왜? 아빠가 할아버지한테 상속 받았으니까.....----->???

https://radait.tistory.com/4

 

객체지향언어란? [특징, 장점, 단점, 종류]

★ 객체 지향 언어(客體指向言語 ) 사전적 의미 IT관련 객체 지향 프로그래밍에서 사용하는 언어로서, 객체를 만들고 조작하며 객체끼리 관계를 맺음으로써 다수의 객체가 함께 수행될 수 있게

radait.tistory.com

package dev_java.ch01;
//java.lang패키지 외 클래스들은 모두 import문을 추가해야된다. 클래스 생성안됨
//-하지않으면 컴파일 에러
import java.util.Scanner;

public class ScannerExam {

  public static void main(String[] args) {
  //   java.Scanner scanner=new java.util.Scanner(System.in);
  //생성자이든 메소드이든 파라미터의 갯수 혹은 타입은 반드시 지킨다.
  Scanner scanner = new Scanner(System.in);//생성부의 파라미터 자리는 시스템의 입력장치정보
  String user = scanner.nextLine();
  int i_user=integer.parseInt(user);

원시형타입은 클래스가 아니니까 변수와 메소드를 가질 수 없다. 선언할 수 없다. (인스턴스화 안됨)

왜? 값이 나오니까.

 참조형과는 다르게 값이 나오므로 간접참조방식으로 사용할수없다.

직접 참조방식이다. 값이 호출된다.

 

참조형 타입은 간접 참조방식이므로 변수나 메소드를 가질수있다. 선언할수있다. 소유할수있다.

 

integer는 int의 wrapper이다. 래퍼는 원시형타입을 객체처럼 쓸수있게 해준다.

https://velog.io/@hadoyaji/int%EC%99%80-Integer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80

 

int와 Integer는 무엇이 다른가

int와 Integer는 무엇이 다른가 // 기본부터 다시 시작하기

velog.io

원시형 타입을 클래스 타입인것처럼 만들어주는 것이다!

대문자로 써서 클래스급으로!!

int와 char를 제외한 나머지는 같은데 앞글자만 대문자이다.

 

Boxing박싱과 Unboxing언박싱

 

급이 안맞는것을 오토박싱 해준다.

 

package dev_java.ch01;

public class Wapper1 {

  public static void main(String[] args) {
    Integer i = new Integer(10); //줄 그인 이유? 자바 가상머신 11을 쓰기때문에(내가) 지원 안할수도 있으니까 조심해라는 의미
    int j=i;
    System.out.println(i);
    System.out.println(j);
    String x = String.valueOf(j);

    String y=x;
    System.out.println(x);

  }
  
}

댓글