국비지원학원/Java

24일차

초코맛 2018. 11. 23. 00:05
반응형

-while
  • <개발자가 시작과 끝을 모를때 
  • 시작과 끝을 모를때 사용
  • 최소 0번 수행, 최대 조건까지 수행
  • <while의 프로우차트는 for와 같다.(do~while도)
  • 문법)
초기값
while (조건식){       <조건식에는 관계연산자, 관계연산자를 잇는 논리연산자(일반논리의 and,or(&&,||)), method(파일에 원하는게 있어요?없어요?->있으면 돌고, 없으면 빠져나감)=>주로 어떠한 일을 하는 메소드가 들어온다. 
    반복 수행 문장들;
    증감소식;     <들어가면 for와 차이가 없다. 없으면 무한루프에 빠져..
}
<관계연산자로만 하면 for와 차이가 없다.
ex)
int i=0;
while(i<5) {
    system.out.println(i);
    i++;
}  <이렇게 쓰면 for 와 차이가 없더라...
  • while로 무한 loop를 실행하고 싶다면 "while(true){"
-do~while
  • 시작과 끝을 모를때 사용
  • 최소(무조건) 1번은 수행 ~ 최대 조건까지 수행
  • 문법)
초기값
do{
    반복 수행 문장들;
    증,감소식;
} while(조건식)   <조건식엔  관계연산자, method 
ex)
int i = 0;
do{
    System.out.println(i);
    i++;
}while(i<5);
  • <아직까지는 초기값과 증감소식이 필요한 for처럼 반복하여 for와 큰 차이가 없어 보이지만 꼭한번 실행되고, 나중엔 method를 넣는게 다른듯하다.
*변수
  • <만드는 목적 - 값 저장 위해
  • 변수를 만드는 목적은 프로그램에서 필요한 값을 일시적으로 저장하고 사용하기 위함.
  • -instance 변수(member 변수)
  • -static 변수(class 변수)
  • -local 변수
  • 이렇게 3가지가 있고 constant는 변수로 취급하지 않는다. 변수마다 생명주기, 쓰임이 다 다르다.
-Instance 변수 (member 변수)
  • (instance와 instance valueable은 아예 다르다.)
  • 클래스 field에서 선언하는 변수
  • <객체화...........객체를 만드는 과정
  • 객체가 생성되어야 사용할 수 있는 변수
  • 생성된 객체에 포함되는 변수.     <(생성된 인스턴스 변수는 객체의 멤버로 포함되어져)
  • <ex)우리는 인스턴스고 강사님은 객체?
  • 자동초기화가 된다.     <지역변수는 꼭 셀프초기화해주어야하고, 하지않으면 Error나는데, 여기는 자바가상머신이 알아서 값넣어줌
  • <만들고(선언후) 바로써도 에러나지 않는다.
  • <데이터형에 따른 초기화값이 무엇인지를 알아야한다
  • 반드시 객체명.변수명 의 형태로 사용된다.
  • <스테틱은 메모리를 아낄수 있다는 장점...
  • 접근지정자를 사용하여 접근범위를 설정할 수 있다.    <패키지 밖에서도 쓸수있다는 것을 이야기함
  • static 영역에서는 instance 변수를 사용할수 없다.
  • 문법)
접근지정자 데이터형 변수명 ;
                                                            <지역변수는 접근지정자가 없다
    -접근지정자/접근제한자
public : 클래스 외부에서 접근 가능
protected : 같은 패키지 안의 다른 클래스에서 접근 가능, 패키지가 다르면 상속관계의 자식클래스에서만 접근 가능하다.
default : 접근지정자를 기술하지 않은 상태, 같은 패키지 안의 다른클래스에서 접근가능    <기본 접근지정자..안쓰면 default 
              다른 패키지의 클래스에서는 접근 불가하다.
private : 클래스 안에서만 접근가능   <(밖에서는 무조건 자식도 안됨, 나만쓸꺼야)★
(폴더directory 개념)
static : 공용메모리에 생성
final : 값변경 불가      <메모리에 올라간 변수로의 차단
transient : 직렬화 방지 키워드    <정보누수 방지 /토막내는게 직렬화=>막는다.
(memory 개념)
  • -데이터형 : 기본형 데이터형, 참조형 데이터형 모두 가능
  • 기본형 : 정수, 실수, 문자, 불린 (byte, short, int, long, char, float, double, boolean
         초기화 :      0   ,\u0000(white space), 0.0, false
  • 참조형 : class,String, array
         초기화 : null (=>객체가 heap의 주소를 할당받지 못했어요.=>못써)      <값이 있긴 하나 ..?
                                                                                                               <객체가 heap으로 올라가게 되는구나..
  • <변수명은 낙타체로구성되나 보통 소문자로 구성 언더바도 쓰긴하나 보고싶은데로 보아서 -랑 헷갈릴수있어..권장ㄴㄴ
  • -변수명 :  소문자로 구성되어, 두번째 단어의 첫글자를 대문자로 (낙타체)     <이름고민 많이 하게된다. 사전펴놓고..막...
  • ex)
class Test{
//class field
    
    int i;   //변수선언(인스턴스 변수/멤버변수)
    public void method(){
    //i 사용가능
    }//local
    public static void main(String args[]){
    //static 이 붙어있어 i 사용불가
    //전역변수(어디든 쓸수있는 변수) 
    }//local
}
  • <인스턴스 특징 : static 영역에서는 인스턴스 변수를 사용할 수 없다. 메모리에 먼저진입하게 되고 뒤에 뭐가올지 몰라서 사용x
  • <ex)반에 1등으로 온사람이 뒤에 누가 오는지 알수없음..전화해 자리에 앉혀놓으면 쓸수있다.(객체화)  =>쓰기위해 불러다 놓음..객체가 만들어져야 <사용가능 메모리에 먼저진입하는 ststic영역에서는 뒤에 누가오는지 알수없어여,, 모르면 못써..

  • *객체화 (instance 화)
    • <객체를 만들거에요
    • 클래스를 사용하기 위해 메모리에 올려놓는것. (전화해 불러다 앉혀놓음)
    • static 영역에서 instance영역의 자원을 사용하기 위해 작성하는 코드.
    •                                                   =>변수, method
    • 문법) 클래스명 객체명 = new 클래스명();
    •                       객체명에 쏙<=객체화
    • 클래스의 instance변수(variable)가 메모리(heap)에 할당 되고, (메모리는 heap에 있다.) 그 주소를 반환( 할당되고 객체명에 저장)
    • ex)
    • Test     t = new Test();
    • t.i = 값;
    • system.out.println(t.i);
    • <객체화를 어디에서든 가능..
    • <스테틱영역은 클래스를 시작했을때 가장 처음실행된다.

    *Memory

     
    • <(stack 구조를 가진다 : LIIO (Las Input First Output)  =>컵에 많이 비유해 넣고빼는..나중에 들어온게 먼저나가여
    • <JVM은 java.exe가 실행될 때 실행되고 JAVA Test로 실행
    • method : 로딩(load)되는 클래스의 정보저장, static 영역 로딩(static변수만들면 여기로)
    • stack : method의 매개변수, 지역변수가 저장
    • instance(heap) : new 로 생성되는 객체가 저장되는 영역
    • ex)
    class Test{
        int i;    //instance 변수      <라는 얘를 쓰려면
        public static void main(String[] args){
                                            //String[] args=>파라미터(parameter
            // i=10;//<어디에도 없어 참조되지않는다.
           
             //객체화
            Test t = new Test();    //지역변수..
            Test t1 = new Test();
            
            //이안에서는 i가 존재하지 않아 t.i(20번지일때 가면 i가 있고 거기에200을 넣어..
            t.i = 200;    //으로 써야한다. main안에 i가 선언되지 않아서? method스택에 없어서...
            t1.i=300;
        }//여기 까지 local
    }//그외 부분 class field
    <위 그림을 표로 만들음>
    클래스의 정보(class Test{ ~ )
    main:
    String[] args<어셈블리어..로 된거...
    <들어가면 스택에 잡혀짐
    //i=10;<어디에도 없어 참조되지않는다.
    Test t = new Test();
    Test t1 = new Test();
    [args] [instance의 주소 ]
    [t] [그 주소(16진수 4byte체계)]
    //<참조형
    [t1] [30]
    //=>이 3가지 묶음을 main Frame
    [
    [i][0]=>[i][200]    //객체
    [i][0]  30번지       //객체
    method
    stack
    instance
    JVM <(사실 전부 거꾸로 쌓여야 한다_스텍이니까)
    java Test
    //static 영역은 가정 먼저 메모리(method영역)에 로드 되므로, 
    //생성될지 모르는 instance변수를 직접 사용할 수 없다.
    //<코드상에서 보이긴 보이나 사용불가
    //i=300;//쓸수없다. static을 i 변수에 붙이라고 나오는데, 옳지 않다.
    //객체화를 하면 객체가 메모리(heap)에 생성되고, 그 주소를 메모리(stack)에 저장

    *static 변수(class 변수)
    • <다른언어에서는 모든영역에서 쓸수있어 전역변수라고도 불렸다.
    • 공용 변수.(JVM에서 실행되는 모든 객체가 하나의 변수를 사용하는 것.
    • 객체없이 바로 사용할 수 있다.(간편)
    • <잘못된 값이 들어가있으면 모든 사용자가 ..변경된 값을 받아쓰게됨.
    • 장점 : 하나만 만들어져 메모리를 절약할 수 있다. <아닐때도!
    • <(ex) 집전화는 집의 모든사람이 사용하는데, 휴대폰비용 어마무시, 한대로 집전화는 공유 , 한달에 한번도 안울리면 적게돈이 들어도 낭비니까.. / 집전화를 고정된자리에 있어 빨리 ..
    • 참조하는 속도가 인스턴스 변수보다 빠르다. (객체화-주소따라-거기에 쓰는)
    • 자동초기화(인스턴스변수처럼 필드에 만든다)
    • 사용) 클래스명.변수명 
    • 작성법) 접근지정자 static 데이터형 변수명;
    public
    protected                기본형 
    private                     참조형
    default
    final
    transient
    • -class의 모든영역에서 사용된다.(전역변수)
    • -이유는 클래스가 실행되면 가장 처음 메모리(method)에 등록이 되기때문에 다 알아보고 쓸수있는것
    • ex)
    class Test{
    1   static int i;//집전화
        int j;//휴대폰
           public void method(){
                test.i
            }
      2     public static void main(String[] args){
                test.i //메모리에 가장 처음 진입하기 때문에 가능한일
                Test t = new Test();
                t.i;//ststic은 어디에도 속해있지않은 공통인데 우리집이라고 하지 내집전화 라고는 하지 않는다...틀리는건 아닌데 쓸수있어.
                //t라는 객체에 딸린게 아니라 주의뜬다...
                Test.i//올바른 표현 클래스명.변수명
                t.j;//따라쓰는게 맞음
            }
    }
    • <그이후에 들어오는 어느곳에서도 쓸수있다?

    • <JVM에서 Java Test 실행시 32메가바이트 메모리에서 method, stack, heap으로 나누어가진다.
    • <method영역은 static 변수가 올라가고, stack 영역은 local 변수를 올리고, heap영역은 instance변수가 올라간다.

    Test{
    static int i
    [i][0]
    main
    String args
    test.i
    [args] [주소]
    [
    <JVM>

    • <static 변수는 프로그램을 종료해야 사라지고, 인스턴스변수는 ..?
    • -실행중인 JVM(자바가상머신)이 종료되어야 메모리에서 사라진다. 쓰든안쓰든 계속 머물러있다.
    • -instance변수는 객체가 소멸될때 가비지컬렉터라는게 있는데(이클립스 아래 쓰레기통) 메모리에서 사라진다.
    • -변수중에 장수하는 애는 static 끝까지 살아있다.->그다음 instance 지역변수가 가장짧게 살아남는다.
    • -heap은 가비지컬렉터가 모아서 자동으로 죽일지(아무도 언젠지는 모름) 셀프로 지울지?

    • //sub는 하위레벨에 들어가는데 평면적으로 보인다.
    • ex)  인스턴스변수의 접근

 




*Method
  • <PL/SQL의 함수와 같다.-중복코드를 줄이기 위해 사용
  • 자주 사용될 코드를 미리 구현해 놓고 필요한 곳에서 호출하여 사용하기 위해 
  • 중복코드의 최소화     <(같은 코드를 덜만들어도 된다.
  • 업무를 구분하여 작성할 수 있다.
  • 메소드의 특징↑
  • ex)
main(){
    for(){
    }
    for(){
    }
    for(){
    }
}//수정시에도 번거로움
    ▼
method(){
    for(){
    }
}
main(){
method();
method();
method();
}
//일을 처리

  • instance method와 static method를 지원
  • (객체화해서 쓰는 메소드, 바로쓸수있는 메소드.)
  • =>객체화하여 사용하는 method
  •                                 =>객체화없이 바로 사용되는 method
  • <같은이름의 메소드 만들수 있다.(오버로딩_다형성)
  • 다형성 (polymorphism)이 지원
  • ---overload/override
  • 작성법) 접근지정자 반환형 method 명 (parameter,,,){
public : 다른 클래스에서 호출가능    <((클래스 밖에서 매소드 호출
protected : 같은패키지의 다른 클래스에서 호출 가능,      <(패키지가 다르면 자식클래스에서의 호출만 가능)
                  다른 패키지에서는 상속관계의 자식클래스에서 호출가능
private : 클래스 안에서만 호출가능 
default : 같은 패키지의 다른 클래스에서 호출 가능, 다른 패키지에서 호출 불가능.
폴더 개념 : 1개줄수 있고

static : 객체화 없이 호출할 떄  
final : (변수에 final붙으면 값변경 불가) method는 값을 저장하지 않음으로 )  오버라이딩(override)을 막을 때 
synchronized : 쓰레드할때..동기화?    >> Multi thread에서 동시접근을 막을때 (한번에 하나)
메모리 개념 : n개 줄수 있다.
<final은 같은 키워드임에도 불구하고 하는일이 다르다.

  • 반환형 : method가 처리한 결과를 내보내는 곳
  • void : 반환 값 없음;
  • 기본형 : byte, short, int, long, char, double, float, boolean
  • 참조형 : (내가만든 클래스), class, String, Array                                           =>이것들중 하나가 나간다.
  • method 명 : 낙타체, 숫잔ㄴㄴ, 차리
  • parameter : (=매개변수: 메소드 밖의 값을 메소드 안으로의 전달값) : method외부의 값을 method 내부로 전달하기 위해 선언하는 변수(local )
  • (값사용  업무처리
  • 결과는 return을 사용하여 반환한다.
  • return 값; 반환형과 일치하는 데이터형으로 기술되어야한다.
  • 반환형이 void인 경우에는 return 쓰지 않는다.
  • instance method는  class의 instance 변수를 사용하여 일치해야하는 겨우.
  • static mehtoe : 사용하지 않고 매개변수로 입력된 값으로만 일처리 해야 하는 경우.
  • -> 클래스명. 메소드 명() 으로 호출(가독성 up)      <클래스?패키지?이름만 다르게 줄수있다면 이름은 같아도 몇개나 생성 가능하다.
반응형

'국비지원학원 > Java' 카테고리의 다른 글

26일차  (0) 2018.11.25
25일차  (0) 2018.11.23
23일차  (0) 2018.11.21
22일차  (0) 2018.11.21
21일차  (0) 2018.11.21