01-21 학습! 👍
추상화 -> 몸으로 말해요
다형성 -> 별명은 서너개~
상속
데이터 은닉과 보호
OOP is A PIE
객체 손님 객, 주체가 아닌 것
지향 추구
변경 용이 + 재사용 용이
블록 형태의 모듈화된 프로그래밍
신뢰성 높은 프로그래밍 - 블록이 맞지 않을까 고민하지 않는다!
현실의 객체가 갖는 속성과 기능은 추상화(abstraction) 되어 클래스에 정의된다!
클래스는 구체화 되어 프로그램의 객체(instance, object)가 된다.
설계도는 하나의 종류(Type)가 되고 설계도를 통해 나온 제품을 객체라고 부름
현실세계 객체 = 상태, 속성 + 기능, 행위
프로그래밍 추상화 = 멤버 변수 + 멤버 메서드 => 구체화
UML 3가지 부분
클래스는 타입이다!
JVM의 메모리 구조
static 영역 - 붕어빵 틀 올려놓는 곳
stack 영역 - 메서드가 실행되는 곳 , thread 별로 별도 관리, 메서드 프레임 적층 프레임에 로컬변수도 쌓이는 구조
heap 영역 - 객체를 저장하기 위한 영역 , thread에 의해 공유
static 변할 수 있다 (주가가 300선에서 정적으로 이동하고 있습니다)
클래스 {} 영역에 선언되며 static 키워드를 붙임
Person.scientificName 지역변수!
메서드가 실행되면 stack에 변수들의 주소들이 저장되고 메서드가 끝날 때 stack이 지워진다 하지만 heap에 주소에 담긴 값들이 저장되어 있는 데 그것들이 garbage GC가 청소해준다
객체가 똑똑해져야 주체가 편함
한꺼번에 많은 데이터를 넘기려면 어떻게 해야 할까?
참조 타입을 쓴다! 레퍼런스 타입!
Variable arguments
public void addAll(int... params){
}
이렇게 하면 몇개의 int가 와도 자동으로 처리!
static member VS non static =member(instance member)
언제나 메모리에 있음 vs 객체 생성 전에는 메모리에 없음
메모리에 있으면 호출 가능 , 없으면 로딩 후 호출 가능
메서드 호출 스택 후입선출
각각의 메서드 호출 시 마다 메서드 동작을 위한 메모리 상자를 하나씩 할당
메서드 호출 시 파림터로 입력된 값을 복사해서 전달
이름(클래스)로 전달한 것은 주소값이 전달 되기 때문에 변경 가능!!
메서드 오버로딩 : 동일한 기능을 수행하는 메서드의 추가 작성
println에 대한 고찰
println이 뭐 아무 타입이나 변수를 넣는데 출력이 가능한 이유가 뭘까?
오버로딩을 해놓고 변수(파라미터) 별로 다르게 기능하도록 만들어 놓았기 때문에!!
메서드 오버로딩 방법
메서드 이름은 동일
파라미터의 개수 또는 순서, 타입이 달라야 할 것
리턴 타입은 의미 없음
중요한 것 하는일이 같아야 함! 그러니깐 모듈화 해서 빼주자!
nPr = 서로 다른 n 개에서 서로 다른 r개를 선택하여 나열(순서)
543 = 5P3
nPr = n! / (n-r)!
존* 빡쳤던 char 배열 입력 받는 법 🤬😇
Scanner에서는 nextInt() 처럼 nextChar() 함수가 없다.
따라서 next().charAt(0)을 사용해서 입력을 받아야 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
char arr [][] = new char[n][n];
for(int i=0; i<n; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0; j<n; j++){
arr[i][j] = st.nextToken().charAt(0);
// 만약 int 배열이라면?
// arr[i][j] = Integer.parseInt(st.nextToken());
}
}
br.close(); // 입력을 다 받았으면 닫아주어야 한다
너무 중요한 부분의 자바 강의를 들었다! 👍👍
객체의 생성과 메모리 할당 부분의 강의 중요!!! 💡
이 부분의 강의는 나중에 다시 들어도 너무 좋을 듯!
알고리즘 숙제 해결하기 🏃