Sololearn에서 제공하는 Java 언어 학습은 총 60개 레슨으로 이루어져 있습니다. 현재는 아직 40번째 레슨에 머물러 있는 상태에요. 뒤로 갈수록 어려워져서 그렇습니다. 부트캠프 핑계로 Sololearn을 놓고 있지만 이번주 일요일까지는 Sololearn의 Java를 끝내 보도록 하겠습니다. 어차피 저랑은 당분간 친해지려고 노력해야하는 언어입니다. 이 포스팅에서는 공부하다가 헷갈리거나 다시 복습하고 싶은 부분을 캡쳐해서 정리해보려고 합니다.
지난번에 썼던거 다 날라가서 슬펐지만 다시 마음 다 잡고 복습해봅니다.
복습 두 번 하면 좋지 뭐...🥹
Scanner
- Scanner class를 사용하기 위해서 다음 syntax를 사용함
- Scanner myVar = new Scanner(System.in);
Division
- int 타입으로 계산한 것은 int 타입으로 결과가 나옴
- 소수점까지 원하면 double을 사용
Prefix & Postfix
- Prefix: 변수의 값을 증가시키고 새로운 증가된 값을 연산에 사용
- Postfix: 변수의 값을 사용 후에 값을 증가시킴
Decision Making
- 조건문(conditional statements)는 다른 조건에 다른 실행을 하도록함
- if문은 가장 자주 사용되는 조건문중에 하나
- if가 true이면 실행되고 아니면 다음 코드가 실행됨
if...else Statements
- if문이 false이면 else가 실행됨
The OR Operator
- The OR Operator(||)은 어느 하나가 true이면 실행
The default Statement
- switch문은 default case를 옵션으로 가질수 있음
- 다른 케이스가 다 false이면 default case를 실행
- default case는 break문이 필요 없음
The switch Expression
- allows multiple comma-separated values per case
- -> 을 사용함
while Loops
- 주어진 조건이 true인 이상 계속 반복
for Loops
- 특정한 숫자만큼 반복한다
- for(initialization; condition; increment/decrement){statement(s)}
do...while Loops
- do...while문은 최소 한번은 실행됨
- 일단 한번 실행 하고 그다음에 while 문 조건에 따라 실행
continue
- 반복문이 스킵하고 다음으로 넘어가게 함
Arrays
- int [ ] arr = new int[5]
- new 키워드를 사용해서 array에 integers 5개가 있다고 선언함
Enhanced for Loop
- for each loop이라고도 불림
- for (dataType item: array){ }
- 도움되는 설명 클릭
- for문 보다 간단함
Reverse a String
- .toCharArray() : String 타입을 CharArray로 바꾼다. 문자열을 문자별로 다 따로 저장
- ex) "Santa" -> "S", "a", "n", "t", "a"
- arr.length에 -1을 하는 이유:
- .length에 -1을 하지 않는 경우: core dump error가 발생
- arr[10]에서 배열의 첫 주소는 0부터 시작하지만!!
- 즉, 배열의 주소는 arr+0, arr+1, ..., arr+9까지이고, 이는 arr[0], arr[1], ..., arr[9]로 표현됨
- 즉, arr[10]부터는 존재하지 않고 arr[10]에 관한 코드가 작성되면 에러가 발생
- 이중for문에서 j<length(=10)이기 때문에 j가 될 수 있는 가장 마지막 수는 9가 되니 j가 9인 경우, if문 안에 j=9인 상황을 대입하면 arr[9] < arr[10]입니다. 이 때 arr[10]은 코드 어디에도 정의되지 않았기 때문에 찾을 수 없음. 그렇기 때문에 컴퓨터는 arr[10]이 도대체 어디 정의되었는지 알 수 없다고 에러를 발생시킵니다.
- 그렇기 때문에 for문의 범위를 length-1까지 정해준다.
- 그러니까 갯수 세는건 우리가 아는 것 처럼 세지만!!! index 번호는 0부터 시작하니까 array 마지막 수를 부르고 싶으면 array.length-1 을 써야한다!
Object-Orientation
- Java는 Object-Oriented Programming(OOP) 객체지향 프로그래밍 스타일을 사용하고 현실과 가깝게 프로그래머들이 생각할 수 있도록 한다
- OOP에서는 각 객체가 유니크 아이덴티티를 가진 독립적인 유닛이다. (마치 현실에서 그런것처럼(?))
- 사과는 객체이다. 머그잔도 그러하다. 각각의 사물은 그만의 아이덴티티를 가진다. 두개의 머그잔이 똑같이 생길 수는 있지만 각각의 독립적인 유니크한 objects이다.
- Objects는 그들을 묘사하는 특징이 있다.
- 차가 빨간색이거나 파란색, 머그잔이 가득 차 있거나 비어있는 것처럼 말이다.
- 이러한 특징(characteristics)들은 attributes라고 불린다.
- attributes는 object의 현 상태를 묘사한다.
- 차가 움직이거나 전화가 울리는 것처럼 object type에도 behavior 가 적용된다.
- object는 3가지 dimension이 있다:
- identity
- attributes - describe object's current state
- behavior - what the object is capable of doing
- class는 object가 뭐가 될지를 묘사한다. object의 청사진(blueprint)과 같음
Methods
- Methods는 behavior를 정의한다
- Method는 실행문의 집합; function이라고도 함
- 아래 코드를 보면 sayHello라는 method를 선언함
- 메소드를 먼저 정의하고 그 다음에 사용함
Static
static이 헷갈려서 댓글창을 열어보았읍니다...🤓 영어 만세!
- memory에는 3가지 타입이 있다:
- 1. static memory: 실행을 위해 프로그램의 변수/함수/object 저장
- 2. stack memory: 함수를 실행하기 위해 변수를 저장( 함수 실행 전, arguments/registers 저장, 함수 실행후 옛 값들 로드)
- 3. heap memory: objects를 저장
- 실행하기 전에는 objects, 함수, 변수가 없음. 함수를 불러서 프로그램을 시작해야만함
- 여기서 함수는 main()을 말함
- main 함수는 static memroy에 생성이 됨
- 그래서 우리는 main함수를 static이라고 정의함
- 다른 함수는 필요하다면 static이라고 정의 할 수 있음
- 여기서 함수는 main()을 말함
- Static keyword는 변수, objects, 메소드를 준비하기 위해서 사용
Public
- Public: accessible anywhere
- Protected: Accessbible by subclass in other packages, same class and package
- Private: Accessible by the same class
- 누가 너의 데이터 또는 메소드에 접근할 수 있는 지를 정의한다
Hello World! code reuse
- 아마 반복문이 이해가 안되서 캡쳐를 했던 거 같습니다...
- 초기값 i= 0, i<=2, i ++ 일때 sayHello()를 실행한다
- 0부터 시작해서 0,1,2 총 3번 실행합니다.
Code reuse 와 parameters
- method 사용의 장점
- 코드를 재사용할 수 있음
- parameters: parameter에 따라서 여러가지를 실행할 수 있음
void
- void는 아무것도 return하지 않는다
- public static void main(String[] args)의 뜻
- main methd는 Stirng arrays를 parameters로 불러오고 아무 값도 return 하지 않는다(void)
Creating Classes
- 나만의 커스텀 objects를 생성하기 위해서 class를 만들어야함
- public class Animal { void bark(){System.out.println("Woof-Woof")
- bark()가 뭐인지 선언한 것임
- class와 그 안의 methods를 사용하기 위해서는 object를 선언해야함
Creating Objects
- dog 는 Animaldml object가 됨 -> bark()를 부를 수 있음 .을 이용해서
- .은 object의 attributes와 methods에 연결하기 위해 사용함
- 이해 안되서 댓글을 캡쳐한 것으로 보임🤓 Gracias Miguel
Object name = new Object();
Animal object를 아무 이름으로 만들 수 있어요. 예를 들자면:
Animal cat = new Animal();
Animal mouse= new Animal();
new Animal()을 쓰는 이유는 constructor가 없기 때문이에요. constructor가 있다면 이렇게 됩니다:
public class Animal{
private String name;
//constructor with parameters
public Animal(String name){
this.name = name;
}
//constructor without parameters
public.Animal(){
this.name="";
}
}
Access Modifiers
- public: access modifier-> 접근 레벨을 정한다
- accessible by any other class
- default: the class is accessible only by classes in the same package
- 따로 정의 되지 않으면 같은 package안에서는 다 접근 가능
- protected: 같은 package + subclass는 접근 가능
- private: 선언된 class만 접근가능
Getters & Setters
- 여기서 조금 막혔습니다😢 혼공자에서 더 파볼 예정
- Getter: get변수이름; 변수 이름 첫글자 대문자 - return the value
- Setter: set변수이름; 변수 이름 첫글자 대문자 - set the value
static variables
- static variables&methods는 class에 속함
- static variable은 다 대문자로 씀
Packages
- packages: 이름 충돌과 class 접근을 통제하려고 사용됨
- a group made up of similar types of classes, along with sub-packages
Encapsulation
- OOP에는 4가지 핵심 컨셉이 있습니다
- encapsulation
- inheritance
- polymorphism
- abstraction
- encapsulation: implementation details are not visible to users
- variables of one class will be hidden from the other classes, accessible only through the methods of the current class => data hiding
- Java에서 encapsulation을 위해서 class변수를 setter와 getter methods로 수정하고 변수값을 본다....??