본문 바로가기
국비학원/수업기록

국비 지원 개발자 과정_Day5

by 루팽 2022. 12. 2.

파라미터 괄호 안 -> 지역변수

 

반환형(응답’피드백O)

 

() 괄호를 쓰는 3가지

메소드, 생성자, 캐스팅 연산자

 

전역 변수-초기화 생략 가능(생성자가 대신해준다)

지역변수-초기화 필수!

 

staticmain보다 먼저 호출되지만(main보다 우선순위가 높다)

static을 많이 사용하면 오버플로우가 나타나 서버에 부담됨

package dev_java.ch01_1202;

public class Static1 {
  static {
    System.out.println("static 호출"); // main보다 먼저 static이 호출된다
  }

  // main 스레드라고 한다.
  // main은 entry point이다.
  // main은 개발자가 호출하는 메소드가 아니다.
  // 시스템이 자동으로 호출해준다.(콜백메소드)
  // main메소드에 코딩하는것은 좋지 않다.
  // main메소드에 작성한 코드는 재사용성이 없다.
  // 클래스 안에 main메소드는 없어도 된다(단 그러면 실행은 불가함)
  
  public static void main(String[] args) {
    System.out.println("main 호출");
  }
}

// static 호출
// main 호출

 

package dev_java.ch01.ch01_1202;

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

  // setter는 write, save
  // setter메소드를 활용하여 전역변수 mem_id를 초기화한다.
  public void setMem_id(String mem_id) {
    this.mem_id = mem_id; // 자기자신 this -> 전역변수 mem_id를 의미함
  }

  // getter는 read, listening
  public String getMem_id() {
    return mem_id;
  }

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

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

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

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

  public static void main(String[] args) {
    MemberVO memberVO = new MemberVO();
    System.out.println(memberVO.mem_id); // 같은 클래스 내에서는 private도 접근 가능
    System.out.println(memberVO.mem_pw);
    System.out.println(memberVO.mem_name);
  }
}

// null
// null
// null

 

package dev_java.ch01.ch01_1202;

public class MemberVOMain {
  public static void main(String[] args) {
    MemberVO memberVO = new MemberVO();
    String 사용자아이디 = "tomato";
    System.out.println(사용자아이디);

    // MemberVO클래스에서 mem_id는 접근제한자를 private로 했으므로
    // 외부에서 접근이 불가하다.
    // 그래서 setter 메소드를 제공하고 있다.
    // private로 선언된 변수는 클래스 외부에서 사용이 불가하다.(보안, 캡슐화)
    // System.out.println(memberVO.mem_id); //private 접근 불가
    // memberVO.setMem_id = "tomato"; //privat 접근 불가
    // String set_id = memberVO.setMem_id("apple"); //void이기에 반환불가!
    
    memberVO.setMem_id("apple");
    String get_id = memberVO.getMem_id(); // 반환형이 있기에 사용가능
    System.out.println(get_id); // apple
    System.out.println(memberVO.getMem_id()); // apple

    // mem_name의 경우 접근 제한자를 public으로 한다면 직접 초기화가 가능하다.
    // memberVO.mem_name = "토마토"; // 직접 초기화
    // String name = memberVO.mem_name;
    // System.out.println(name); // 토마토
    // System.out.println(memberVO.mem_name); // 토마토

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

    // 아래와 같이 setter메소드를 호출하면 전역변수인 mem_pw에 12345가 초기화됨
    memberVO.setMem_pw("12345");
    // getter메소드를 호출하면 전역변수인 mem_pw에 저장된 값이 출력됨
    // 만일 setter메소드를 호출하지 않으면 null이 출력될 것임
    System.out.println(memberVO.getMem_pw()); // 12345
  }
}

 

package dev_java.ch01.ch01_1202;

public class MemberAction {
  // 회원가입을 처리하는 메소드 선언하기(회원가입 성공 -> 1 반환 / 회원가입 실패 -> 0 반환)
  public int memberinsert(String mem_id, String mem_pw, String mem_name) {
    System.out.println("memberinsert 호출-파라미터 3개");
    System.out.println(mem_id + ", " + mem_pw + ", " + mem_name);
    int result = -1; // End of File(없다를 나타낼 때 -1로 표현하기도함)
    result = 1;
    return result;

  }

  public int memberinsert(MemberVO memberVO) {
    System.out.println("memberinsert 호출-파라미터 1개");
    System.out.println(memberVO.getMem_id() + ", " + memberVO.getMem_pw() + "," + memberVO.getMem_name());
    int result = -1;
    result = 0;
    return result;
  }

  public static void main(String[] args) {
    // insert here-memberinsert 메소드를 호출하시오.
    MemberAction memberAction = new MemberAction();
    int result = memberAction.memberinsert("apple", "123", "사과");

    if (result == 1) {
      System.out.println("회원가입 성공");
    } else {
      System.out.println("회원가입 실패");
    }

    MemberVO memberVO = new MemberVO();
    memberVO.setMem_id("tomato");
    memberVO.setMem_pw("456");
    memberVO.setMem_name("토마토");
    memberAction.memberinsert(memberVO);

    if (result == 1) {
      System.out.println("회원가입 성공");
    } else {
      System.out.println("회원가입 실패");
    }
  }
}

 

package dev_java.ch01.ch01_1202;

class Static1 {
  int i;
}

class Static2 {
  static int i;
}

public class StatcExam1 {
  public static void main(String[] args) {
    Static1 static1 = new Static1(); // static이 없기에 인스턴스화
    System.out.println(static1.i);
    System.out.println(Static2.i); // static int이기에 바로 호출가능
  }
}

 

package dev_java.ch01.ch01_1202;

class Static3 {
  int i;
  static int j;

  void methodA() {
    System.out.println("non-static 변수 i  methodA에서 호출가능  ===> " + i);
    System.out.println("static변수 j methodA()에서 호출 ===> " + j);
  }

  static void methodB() {
    Static3 static3 = new Static3();
    System.out.println("non-static 변수 i methodB에서 호출 =>" + static3.i); // 인스턴스화 후 호출가능
    // System.out.println("non-static 변수 i methodB에서 호출 불가 ===> "+i);
    System.out.println("static변수 j methodB()에서 호출 ===> " + j);
  }
}

public class StaticExam2 {
  public static void main(String[] args) {
    Static3 static3 = new Static3();
    static3.methodA();
    Static3.methodB();
  }
}

// non-static 변수 i  methodA에서 호출가능  ===> 0
// static변수 j methodA()에서 호출 ===> 0
// non-static 변수 i methodB에서 호출 =>0
// static변수 j methodB()에서 호출 ===> 0

 

package dev_java.ch01.ch01_1202;

class A1 {
  static int i = 1;
}

class A2 {
  void methodA() {
    A1.i = 2;
  }
}

public class StaticExam3 {
  public static void main(String[] args) {
    A2 a2 = new A2();
    a2.methodA();
    System.out.println(A1.i); // 2
  }

 

package dev_java.ch01;

// java.lang패키지 외 클래스들은 모두 import문을 추가해야함(하지않으면 컴파일에러)
// 클래스의 구성요소 2가지(변수'필드, 메소드)
// 필드+메소드 => 클래스 정의
// 클래스를 인스턴스화하면 메모리(램)에 로딩이 된다.
// 클래스를 인스턴스화하는 이유는 변수와 메소드를 호출하기 위해서이다.
// 인스턴스화.메소드명();
// 인스턴스화.메소드명(파라미터1);
// 인스턴스화.메소드명(파라미터1, 파라미터2, ...);
// 인스턴스화.전역변수(원시형+참조형 모두 가능);
// static은 하나다, 원본을 복사할 수 없다.
import java.util.Scanner;

public class ScannerExam1 {
  public static void main(String[] args) {
    // 생성자이든 메소드이든 파라미터의 개수, 타입은 반드시 지켜야한다.
    Scanner scanner = new Scanner(System.in); // 생성부의 파라미터 자리는 시스템의 입력장치정보
    System.out.println("0~9 사이의 숫자를 입력해주세요.");
    String user = scanner.nextLine();
    scanner.close();

    // int의 wrapper Integer
    int i_user = Integer.parseInt(user); //user가 입력한 String값을 int로 변환
    System.out.println(user + 1);
    System.out.println(i_user + 1);
  }
}

// 1을 입력할 경우
// 11
// 2

 

package dev_java.ch01;

public class Wrapper1 {

  public static void main(String[] args) {
    Integer i = new Integer(10);
    int j = i;
    System.out.println(i + 1); // int 11
    System.out.println(j + 1); // int 11

    String x = String.valueOf(j); // int를 String으로 바꿔줌
    // String y = j; // 컴파일 에러, 타입이 다름!
    String y = x;
    System.out.println(y + 1); // String 101

    if (y instanceof String) {
      System.out.println("y는 String 타입입니다.");
    }
    if (i instanceof Integer) {
      System.out.println("i는 integer타입입니다.");
    }
  }
}

// 11
// 11
// 101
// y는 String 타입입니다.
// i는 integer타입입니다.

 

상속관계

상속받으면 그 부모의 기능과 나의 기능을 사용할 수 있음

증조할아버지>할아버지>아버지>나(아버지의 것을 받는 게 가장 유리함, 가장 많은 기능을 쓸 수 있음)

 

원시형 타입(변수)은 (참조형, 클래스가 아니니까) 변수와 메소드를 선언(소유)할 수 없다

원시형은 호출하면 값이 나오는 직접 참조 방식이므로 간접 참조 방식으로 사용할 수 없다

 

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

 

wrapper Class

원시형(기본) 자료 타입을 객체로 다루기 위해 사용하는 클래스

Integer는 원시형 int를 감싸 객체(클래스)같이 사용할 수 있게 해 줌

기본 타입(원시형 타입, primitive type) 래퍼클래스(wrapper class)
byte Byte
char Character
int Integer
float Float
double Double
boolean Boolean
long Long
short Short

 

박싱(Boxing)

기본 타입의 값을 포장 객체로 만드는 과정

 

언박싱(UnBoxing)

포장 객체에서 기본 타입의 값을 얻어내는 과정

 

자동 박싱(Auto Boxing)과 자동 언박싱(Auto UnBoxing)

Integer num = 10; //자동 박싱, heap영역에 Integer객체가 생성됨
int i = num; //자동 언박싱

 

git연동(git에서 repository 생성)

깃허브에서 새로운 repository 만들기

code 눌러서 주소 저장

로컬 repository 만들기(웬만하면 같은 이름으로)

해당 파일에서 cmder here, git init

 

echo 파일내용 > 파일명

exho 내용 >>(수정의 의미) 파일명

 

working directory-untracked / tracked

커밋하려면 untracked를 tracked로 옮겨야 함(add 명령어 사용)

tracked상태를 수정하면 untracked상태로 바뀌기에 다시 add 한 다음 커밋해야 함

 

staging area-커밋 대상들, tracked 된 것들

history로 볼 수 있는 상태(버전 관리 시점)는 커밋을 하고 난 다음부터!

git commit만 치고 엔터 치면 VSC로 연결-내용을 적고 저장, 닫으면 완료(깃 설정해둬서 가능)

 

로컬과 깃 서버 연결

git remote add origin repository주소

git push origin master master로 깃과 동기화 완료

 

깃허브 repository 생성&연동 과정

디폴트로 깃허브에서 레포를 먼저 만듦-main(디폴트 값), readme 추가 -> 로컬에도 같은 이름 폴더 생성

git init 엔터 →버전 관리를 위해서 git에서 필요한 파일을 추가하기 →.git파일이 추가됨(보기-숨김 파일 체크할 것)

echo 메시지 문자열 > a.txt(파일 이름) →a.txt 파일에 메시지 문자열이 저장됨

처음 파일(a.txt, b.txt, c.txt)이 생성되면 a, b, c 모두 untracked에 있다가

git add . 엔터 →Staging area로 이동함(이클립스, 소스 트리 같은 깃툴에서는 여기서부터 보임)

untracked → staging area로 이동함

echo a.txt 수정 > a.txt 엔터 →이때 tracked 상태로 감(staging상태에서 수정을 했을 때)

git add a.txt 엔터

git commit -m “메시지” 엔터

===여기까지는 로컬 repository===

 

===로컬 레포를 웹 레포로 올리기===

git remote add origin repository주소

git push origin master(branch이름) 엔터 →웹 레포로 올라감

github 브라우저에서 새로고침

댓글