[ class ]
class A = 객체
객체변수 int a;
a라는 객체 안에 들어있는
public -> 패키지 내부 어디서든 쓸 수 있다.
private -> 안정성과 보안성 때문에 사용(캡슐화)
field 구역에선 왠만해선 private 사용
this = 자기 자신
public void setA(int a) { // int a는 받아오는 값
this.a=a; // 뭐가 a인지 프로그램이 모르기 때문에 알려주는 것.
}
public int getA() {
}
[ method ]
public class A {
private int a;
public String(1) name(2)(String name)(3) { //String->리턴값의 타입(ex.int 등등)
return b=name;
메소드 구조
(1)첫 번째로 오는 것은 내가 받고 싶은 타입
(2)아무거나 넣어도 됨
(3)입력 타입
void에 return 쓰면 멈춘다는 의미
} // 입력과 리턴을 둘 다 가지고 있는 메소드
public void setA(int a) { // void -> 리턴값이 없는 경우 (단순한 계산 같은 경우)
this.a=a;
int a를 입력받아도 값을 출력할 수 없다. (리턴을 안 받았으므로)
} // 리턴값은 없는데 입력값은 있는 메소드
public
}
식을 setter에 넣는다 (식을 세팅한다라고들 한다)
세터에 입력을 받아오는 동시에 필드값에 저장이 되는 것
getter는 값을 저장한 것을 받아오는 메소드
게터세터가 있는 클래스는 데이터를 담는 그릇이라고 생각하기.
리턴값도 없고 입력값도 없는 경우가 있는데 굳이 알 필요 없다.
}
}
[ stack & heap ]
중괄호
블럭 안에서 변수를 설정하면 블럭 안에서만 논다
블럭이라는 게 안에 있는게 지역변수
class
전역변수
생성자
메소드
Scanner -> class (앞에가 대문자면 클래스)
class가 자바 안에 있다.
sc(참조변수=레퍼런스)
A.a=new a()
실행 중인 프로그램 -> process
process도 결국에 할당된 메모리를 가지고 있다.
stack이랑 heap
메소드를 실행시키면서 메소드를 탑재를 시킨다.
stack -> 먼저 들어온 데이터가 나중에 나온다. (선입후출)
1,2,3이 들어가면 나오는 건 3,2,1 순서 / 주소값을 저장하는 것
int a = 1; (그냥 변수는 메모리 상으로 들어간다. 하드코딩) 1 = 4byte
int a = 2;
int a = 3;
자바가 지우기 때문에 맨 아래값만 나온다.
heap -> 메모리가 큰 거를 저장한다. (메모리에서 heap 자체가 인위적으로 공간을 만듦)
인위적으로 만들었기 때문에 공간이 어딨는지 모름. 주소값이란게 있는데, heap의 주소값이 있을거임.
new가 heap의 메모리를 할당해주는 것임.
heap은 주소값을 저장하는 게 아니라 불러들이는 것임. ( 다른 주소값을 불러들임 )
Scanner sc = new Scanner(System.in) -> System.in 매개변수
생성자의 역할: 객체등록이랑 필드값 초기화
sc = 참조변수
class A
public a() { } -> a() 클래스이면서 생성자임
A.a=new a() -> a() 클래스이면서 생성자임
생성자가 필드의 값을 초기화함.
[ get set 생성자 ]
Scanner sc = new Scanner(System.in)
-----------------------------------------------
스캐너 클래스를 자료형으로 가지고 있는 레퍼런스형 변수 sc는 new 새로운 매개변수
System.in을 가지고 아래줄로 저장한다.
public Scanner {
private int System.in
Scanner() {
}
Scanner(int System.in) {
this.System.in = System.in;
}
} // 아래 Scanner 두 개는 오버로딩이다.
public GetSet {
private String name;
private String password;
private int age;
GetSet() { // 정보를 기입 -> 생성자 !
}
GetSet(String admin, String adpw, int adage)
this 뭐시기
this .......
} // 관리자 정보 기입
public void setName(String name) {
}
pulic String getName() {
------- 생략 --------
}
public void setPassword(String password) {
}
public String getPassword() {
}
public String
public static void main(String[] args) {
GetSet gs = new GetSet(); // 생성자 !
}
[ Instance ]
준영, 강균, 은화 시험을 봐요!
시험지가 있겠죠?
한 시험을 본다 생각했을 때
시험문제는 다 똑같겠죠?
근데 이 시험지에 쓴 결과들은
모두가 같을 수도 다를 수도 있겠죠?
이게 인스턴스
결국 틀은 똑같다
틀 - 시험지
ex) 만약에 아주 만약에
준영, 강균, 은화 시험 정답을 똑같이 썼어요!
과연 이 세 개의 시험지가 같다고 생각할 수 있을까요?
정답은 다르다! 이유: 정답은 같이 썼는데 쓴 사람이 다르기 때문.
A a = new A();
A b = new A();
A c = new A();
A d - new A();
성준이가 드럽게 공부를 못해서 재시험을 보았다.
A d = new A();
a,b,c에 들어오는 new A()가 저희가 볼 때는 똑같이 생겼죠?
근데 new라는게 힙에다가 메모리를 임의로 생성한다라고 했었죠?
결국에는 저 위의 세 코드는 new 때문에
계속 임의의 공간에 생긴거에요! 값이 절대 같을 수가 없죠
인스턴스 -
[ 상속 ]
상속 (extends) 하는 이유 : 유지보수가 쉬워서
메소드는 기능
사원에서 정규직 차이점을 둠 -> 직급에 따른 급여 계산
super.getPay(); -> Pay를 가져옴
오버라이딩 : 메소드의 기능을 재정의해서 쓰겠다.
오버로드 : 하나의 메소드를 매개변수로 입맛따라 바꿔서 쓴다.
매개변수긴 한데, 타입은 상관 X, 개수랑 순서만 다르면 가능하다.
OOP : 은닉화, 다형성, 추상화, 상속성
오버로딩
thread : 실행 중인 프로그램을 나누는 작업단위
프로세스 안에 쓰레드
task(이클립스, 팀뷰어, 크롬 다 돌아가는 것) 작업
BufferedReader(받는 거)
1: 1 대응
Printwriter(주는 거)
Printwriter를 클라이언트에서 쓰면 BufferedReader를 서버에서 꼭 써야된다.
안 받아주면 socket 오류가 난다.
Broadcast (공지사항, 스팸문자, 광고문자)
트래픽을 유발할 수 있음 -> 느려질 수 있다 -> 우리는 못 느끼는데
서버측에서 클라이언트로 타고 들어올 때 트래픽을 유발할 수 있음.
병목현상(내용물이 병 아래에는 많은데 병목은 작아서 지나가면서 힘들어한다)
차선이 8개가 있는데 톨게이트는 2개 밖에 없다.
받는 안 받든 뿌리는 거
[ 오버로딩 & 오버라이딩 ]
OverLoading
: OOP diversity (다형성)
여권 프로그램
데이터 : 이름, 주민번호, 여권번호
여권(이름, 주민번호);
여권(여권번호);
여권(이름, 주민번호, 여권번호);
똑같은 메소드로 임의의 정보(매개변수)를 받아서
처리를 한다. - 오버로딩
-> 코드 길이는 엄청 길어짐.
-> 반면에 수정할 일이 생기면
그 값을 받는 것만 수정하면 된다
-> 유지보수가 쉽다.
상속
부모의 정보를 받아서 쓴다.
아버지, 어머니.
다중상속이 안됨!
변수, 메소드
OverRiding
: 메소드를 재정의하는 것!
-> 부모가 가지고 있는 기능
-> 자식이 쓰고 싶은데 취지에 맞지 않다
-> 그럴 때 사용하는게 오버라이딩.
Ex. 강사님 말씀하신 것
아버지 세대 핸드폰(통신기기)
저희 세대 스마트폰(통신기기)
핸드폰 구식 -> 핸드폰의 기능을 싹 다 바꿔버리겠다
-> 오버라이딩
통신기기는 핸드폰이다.
핸드폰은 스마트폰이다.
통기기기는 스마트폰이다.
is ~ A
~는 ~다.
has ~A
~는 ~를 가지고있다.
(Ex. 리모콘(버튼누르기, 채널바꾸기, 종료하기, 음량조절 등)
사용자가 리모콘의 동작방식(기능 내에 로직)을 알 필요가 없다
-> 기능만 사용함
-> 이게 has ~A
사용자는 리모콘을 가지고있다(가져서 쓴다)
[ 상대경로 ]
./ : 현재 폴더
../ : 자신의 부모 폴더 (바로 위 폴더)