반응형
-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번지 //객체methodstackinstanceJVM <(사실 전부 거꾸로 쌓여야 한다_스텍이니까)java Test//static 영역은 가정 먼저 메모리(method영역)에 로드 되므로,//생성될지 모르는 instance변수를 직접 사용할 수 없다.//<코드상에서 보이긴 보이나 사용불가//i=300;//쓸수없다. static을 i 변수에 붙이라고 나오는데, 옳지 않다.//객체화를 하면 객체가 메모리(heap)에 생성되고, 그 주소를 메모리(stack)에 저장*static 변수(class 변수)-
<다른언어에서는 모든영역에서 쓸수있어 전역변수라고도 불렸다.
-
공용 변수.(JVM에서 실행되는 모든 객체가 하나의 변수를 사용하는 것.
-
객체없이 바로 사용할 수 있다.(간편)
-
<잘못된 값이 들어가있으면 모든 사용자가 ..변경된 값을 받아쓰게됨.
-
장점 : 하나만 만들어져 메모리를 절약할 수 있다. <아닐때도!
-
<(ex) 집전화는 집의 모든사람이 사용하는데, 휴대폰비용 어마무시, 한대로 집전화는 공유 , 한달에 한번도 안울리면 적게돈이 들어도 낭비니까.. / 집전화를 고정된자리에 있어 빨리 ..
-
참조하는 속도가 인스턴스 변수보다 빠르다. (객체화-주소따라-거기에 쓰는)
-
자동초기화(인스턴스변수처럼 필드에 만든다)
-
사용) 클래스명.변수명
-
작성법) 접근지정자 static 데이터형 변수명;
publicprotected 기본형private 참조형defaultfinaltransient-
-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]mainString argstest.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) <클래스?패키지?이름만 다르게 줄수있다면 이름은 같아도 몇개나 생성 가능하다.
반응형