객체에서 람다 함수를 호출하면 해당 함수는 일시적인 Scope를 생성하고, 해당 Scope 안에서는 객체의 이름 없이도 접근이 가능하다.
apply
참조 연산자를 사용하지 않는다.
처리가 끝나면 인스턴스를 반환한다.
fun main() {
var a = Food("사과",2000).apply{
name = "세일 중인" +name
discount()
}
}
class Food(var name: String, var price: Int){
fun discount(){
price -= 500
}
}
run
참조 연산자를 사용하지 않는다.
처리가 끝나면 최종값을 반환한다.(마지막 구문의 값을 반환)
fun main() {
var a = Food("사과",2000).apply{
name = "세일 중인" +name
discount()
}
a.run {
println("상품명: ${name}, 가격: ${price}원")
}
}
class Food(var name: String, var price: Int){
fun discount(){
price -= 500
}
}
fun main() {
var name = "오렌지"
var a = Food("사과",2000).also{
it.name = "세일 중인" +it.name
discount()
}
}
class Food(var name: String, var price: Int){
fun discount(){
price -= 500
}
}
let
처리가 끝나면 최종값을 반환한다.
파라미터를 통해 인스턴스를 넘긴다.
---- price 가 중복될 경우! -----
fun main() {
var price = 5000
var a = Food("사과",2000).apply{
name = "세일 중인" +name
discount()
}
a.let {
println("상품명: ${it.name}, 가격: ${it.price}원")
}
}
class Food(var name: String, var price: Int){
fun discount(){
price -= 500
}
}
publicclassPerson{
String name;
int num;
publicPerson(){}
publicPerson(String name){
this.name = name;
}
publicPerson(String name,int num){
this.name = name;
this.num =num;
}
}
publicclassExample{
publicstaticvoidmain(String args[]){
// Person 객체 생성
Person person = new Person("SeungWon"); //name = SeungWon
Person person = new Person("SeungWon",97); //name = SeungWon, num = 97
}
}
오버라이딩(Overriding)
상위 클래스에 있는 메소드를 하위 클래스에서 재정의하는 과정을 오버라이딩이라고 한다.
상속관계가 있는 자식 클래스에서 부모 클래스에게 메소드를 가져와 새롭게 사용한다는 의미이다.
이러한 오버라이딩은 다형성(Polymorphism)과 연관이 있다. 다형성은 같은 이름의 메소드가 다양한 결과를 나타낼 수 있다는 특징이 있다. 즉 자식 클래스에 재정의해서 사용할 수 있기 때문에 naming()메소드는 부모와 자식에서의 사용이 다르다. 또한 클래스를 인스턴스화 하여 부모나 자식을 참조하는 객체를 만들어 다형성을 나타낼 수도 있다.
public class Main(){
publicstaticvoidmain(String []args){
Parent person = new Child();
person.naming(); //Child 클래스에 있는 내용이 나옴
}
}
구글에서는 안드로이드 파이(9)버전에서 다음 버전인 안드로이드 Q 버전으로 만들지 않았다. 원래 알파벳 순으로 P다음 Q의 차례이다. 하지만 비영어권 국가에 대한 배려와 각 국가마다 발음이 다르다는 이유로 더 이상 디저트 이름으로 네이밍하지 않겠다고 하였다.
안드로이드9 vs 안드로이드10 비교
안드로이드 9(파이)는 2018년 8월 6일에 출시
안드로이드 10은 2019년 9월 3일에 출시
1. 제스처 기능 변화
제스처 기능을 설정하고 싶다면 설정 -> 디스플레이 -> 네비게이션 바를 통해 변경할 수 있다.
9(파이) 버전에서는 이러한 형태의 네비게이션 바가 아래로 숨겨져 있어서 화면이 더 커 보이고 편리하게 사용하라는 목적으로 만들어졌다. 하지만 왼쪽에 뒤로가기 버튼이 고정되어있기 때문에 원래 위치와 달라서 불편했다. 또한 항상 위로 올리기 때문에 삼성페이를 사용하는 분들은 다소 번거롭다.
안드로이드 10버전에서는 안드로이드 9(파이)버전에서 불편했던 제스처 기능이 업데이트 되고 새롭게 변화되었다.
우선 아래에서와 같이 버튼 순서도 고를 수 있고
화면 제스처를 선택했을 때
옵션 더보기를 누르면 9버전인 아래에서 위로, 새롭게 추가된 여러 방향으로 와 제스처 민감도가 있다.
여러 방향으로는 홈 화면 하단에서 위로 올리면 홈으로 가게되고 뒤로가기는 왼쪽으로 밀기, 등 실생활에 사용되기 쉽게 만들었다.
제스처 민감도를 통해 터치 인식되는 민감도를 조절할 수 있다.
2. 야간모드 vs 다크모드
설정 -> 디스플레이 -> 다크모드
안드로이드 9 야간모드에서 10 다크모드로 변경된 점은 크게 두 가지가 있다.
배경에 적용, 다크모드 강제 적용(다른 앱에서도 다크모드 사용 가능)
위에 노티바를 내린 후 다크 모드를 누른다.
배경화면에 적용을 누르게 되면 폰 배경이 전체적으로 어둡게 된다.(눈 보호 목적)
추가기능 : 설정 -> 개발자 옵션 ->다크모드 강제 적용을 누르게 되면 다른 앱들도 다크모드를 적용할 수 있다!!
3.한손 조작모드 Upgrade!!
안드로이드 9(파이)에서도 한손 모드가 적용이 되었다. 하지만 안드로이드 10에서는 좀 더 불편하고 까다로운 부분들을 개선하였다. 기존 방식에서는 <하단의 모서리를 대각선 방향으로 위로 밀어 올린다> <홈 버튼을 3번 누른다> 이 방법으로 실행되었다. 하지만 이 방법이 인식하는 과정에서 불편함을 해결하고자 이러한 형태로 바뀌었다.
4. Edge Lighting 기능 효과 추가!!
안드로이드 9 -> 10 업데이트 과정에서 엣지 스크린은 Edge Lighting 기능이 추가되었다.