4/13 - 4/20
목표: 2강. 객체지향 프로그래밍 - 챕터 01 ~ 16
이번주 자바교육 소감
저번주는 기본적인 것들을 다뤄서 진도가 쑥쑥 나갔다. 조금 지루한 느낌도 들었다.
속도는 1.5배로 해놓고 휘리릭한 느낌이었다.
그런데 이번주 객체지향을 들어가면서 갑자기 너무 어려워 진 것이 아닌가?
자바교육을 다른곳에서 들었을때 내가 왜 자바를 어려워 했었는지 이제야 기억이 났다.
아직 10프로 정도밖에 안했는데...
자바교육 강의를 들을때마다 잊고 또 하고 잊고 또하고. 앞으로 이렇게 되면 어떻하지?
그래도 아직 이해를 못하고 넘어간건 없으니까 앞으로의 자바교육 열심히 들어보자!
내 자신을 뽀개자!
- Switch문의 새로운 스타일
Switch가 자바버전이 업 되면서 더 간편한 스타일이 나왔다.
위의 코드가 우리에게 익숙한 스위치문이라면 아래는 JavaSE-14 부터 적용 가능한 코드
더 간단해 졌지만 나에게는 공부할 게 늘어 그닥 달갑지만은 않다.
case를 반복적으로 쓸 필요없이 ,로 나누고 yield로 리턴.
그런데 해봤는데 안된다. 문제는 java버전 설정을 잘못함.
위에 버전은 [jdk-15.0.2]
그래서 다시 새폴더'chapter2'를 생성하고 설정란에 [JavaSE-14]로 선택만하면 끝. 이제 제대로 된다.
Sum 에서 오류가 나는 이유.
sum은 지역변수. 자동으로 초기화 안됨.
그래서 int sum = 0; 이라고 초기화 해야함.
패키지 이름은 소문자
클라스 이름은 대문자로 시작 추천.
Int 나 string 등 변수/메서드 이름은 camel notation 추천/ convention임.
Java 파일 하나에 Public class는 단 하나, class는 여러 개 가능. 이름은 public class와 동일.
패키지 이름 바꾸기 - F2
함수 = 어디에 소속x
메서드 = 클라스 안에 소속. C++에서는 멤버function(멤버함수)이라고도 함. getStudentName()
클래스
참조변수 = 클래스를 참조하는 변수. Class가 Student이면 Student studentLee = new Student();
인스턴스 = 참조변수로 만들어진 것. studnetLee 인스턴스. 힙메모리에 저장.
지역변수 = 스택메모리에 저장, 자동으로 초기화 되지 않음. int i=0; 초기화 필요.
멤버변수 = 객체가 만들어 질 때 자동초기화됨. Public int grade; 자동으로 0 초기화. 이클립스에서는 멤버변수를 기본적으로 파란색으로 표시.
studentNumber = studentNumber; 에서 왼쪽애는 가장 가까운 변수를 찾으려는 속성이 있다.
결국 자기 자신이 제일 가까우므로 스스로 복사하는 꼴(넘어온 매개변수가 매개변수에다 값을 대입하는 꼴임). 그래서 this.(멤버변수를 가르킴) 가 필요 -> 왼쪽은 멤버변수 = 오른쪽은 매개변수
This.을 붙여주면 this.studentNumber는 오른쪽의 studentNumber와 같지 않게됨.
서비스 모듈: 서비스를 제공해 주는 모듈(서버). 기본생성자가 있는 클라스.
클라이언트 모듈: 서비스를 사용하는 모듈. 객체를 생성하는 클라스. 오브젝트를 가져다주는 코드
오버로딩(overloading)
- 메서드 이름은 같고, 매개변수만 다름.
- 사용자의 편의성을 위해. 어떤 생성자(constructor)는 매개변수 3개 모두 필요. 어떤 생성자는 1개만 필요. 이 모든걸 제공해 주면 이걸 사용하는 클라이언트 코드는 골라서 쓸 수가 있다. Jdk에서 제공되는 여러가지 클래스들 보면 이런것들을 제공해주는 클래스들을 볼 수 있음.
- Default constructor 같은 경우 제공되어 문제가 생길 땐, 제공안 하는것이 맞음.
- 생성자를 하나도 만들지 않으면 default constructor는 항상 제공이 된다.
클라스: 오브젝트의 블루프린트. 추상화/제너럴한 이름으로.
- 참조 자료형 변수
변수의 자료형- 기본자료형(primitive data type)
참조자료형(오브젝트형의 객체타입 data type) - String(예외적.변수생성필요x. new라는 키워드 없이 바로 사용 가능), Date, Student …
참조자료형 - 변수 선언 후 그냥 쓸수 없다. 객체이므로. 생성해서 써야함.
이제부터 고비다. 술술 넘어가던 진도가 막히기 시작했다. 6분짜리 영상 이해하는데 30분 넘게 걸린다..
- 접근제어 지시자(access modifier)와 정보은닉(information hiding)
Access modifier
이 프로그램의 포인트는
변수들은 private이어서 다른 클라스에서 접근불가. 즉 main에서 데이터 수정 불가.
접근은 get/set 메소드를 통해서만 가능(why? Public으로 정의되어 있으므로)
캡슐화 (encapsulation)
- Private/protected 이용.
- 외부에서 사용할 메서드 1-2개만 오픈해서 사용/나머지는 자동으로 생성되서 사용될 수 있도록
- 대부분 멤버 변수/메서드 private -> 클라이언트가 더 사용하기 쉽게/사용API 한정적/객체작동이 일관성있다.
디버깅/기능추가에 유연.
사용자가 public으로 된 프로그램 제어가 가능한 들 전화번호부를 순서대로 쓰거나 위에 라인 각을 맞추는 일 들은 불필요하므로 private으로 해 놓는 것이 편리.
StringBuffer/StringBuilder
StringBuffer buffer = new StringBuffer(); //스트링클래스를 이어 붙일 수 있지만 메모리 오버헤드가 큼. 내부적으로 늘어날수 있는 버퍼를 가지고 있는 클래스에 스트링을 연결하고 나중에 스트링값으로 리턴하는 방법.
객체 자신을 가리키는 this
- 객체를 new하면 heap 메모리에 객체가 생성 <- 이 주소값 갖는 애를 참조변수라 함. = 참조값(reference value)
- 변수는 외부에 위치해서 인스턴스 값을 가르키게 됨.
- 인스턴스 내부에서 자기 자신의 주소값을 갖는 것이 this.
- 생성자: 원한다고 아무때나 호출할 수 있는 메서드와 다르다. 객체가 생성될 때만 호출이 됨.(new 를 사용할 때)
- 생성자 안에서 또 다른 생성자를 호출할 때(상속: 하위클래스에서 상위클래스 생성자 호출)
- 여러개의 클래스중에 하나의 클래스에서 다른 클래스 호출시 this사용.
- 자신의 주소(참조값) 반환할 때 this사용.
- 생성자 역할: instance 초기화.
휴... 어렵긴 했지만 그래도 새로운 것을 이해하고 배우는게 나름 보람이 있었다.
자바교육 설명을 들을땐 이해가 잘 되는데 막상 코드를 짜 보려고 하면 무념무상이 된다.
코딩 잘 하는 사람들이 너무 대단하게 느껴진다.
자바/스프링 자바인터넷 강의 링크
'Back-end' 카테고리의 다른 글
(자바강의/후기)JAVA/Spring 4주차-2 (0) | 2021.04.28 |
---|---|
(자바강의/후기)JAVA/Spring 4주차-1 (0) | 2021.04.27 |
(자바기초/후기)Java인강/Spring 3주차 (0) | 2021.04.27 |
(자바인강/후기) Java/Spring 1주차 (0) | 2021.04.07 |