본문 바로가기
GDSC : KOTLIN STUDY

코틀린 스터디(2주차) - 2/3

by 나영수 2022. 10. 5.

-OOP(Object Oriented Programming)으로써 자바, C#, 코틀린 등이 존재한다.

1. variable(변수) -> id 값이 저장되게 되기 때문에 null일 수 없다.

2. control flow(흐름제어) -> 특정 조건이 만족할때 코드가 실행되게 하는 것이다.

3. functions(함수) -> 먼저 함수를 선언하고 사용하면 되므로 코드를 사용하는데 좋다.

4. collections(컬렉션) -> 많은 요소를 한 군데에 저장하는 것 

ex) list, arr, arraylist -- 차이점을 알아보자

5. classes -> 복잡한 프로젝트인 경우 한눈에 파악하기 좋아진다.

-클래스와 객체 + 인스턴스

클래스란 객체를 만들어 내기 위한 틀, 즉 연관되어 있는 변수와 메서드의 집합
클래스는 필드, 생성자, 메소드로 구성되어 있다.

필드 : 객체의 데이터가 선언되는 곳
생성자 : 객체가 실제로 생성될 때 초기화 역할을 담당
메소드 : 객체의 동작을 실행하는 곳

객체란 구현할 대상을 의미한다.(유, 무형의 대상) ->객체는 클래스의 인스턴스라고도 불린다.

인스턴스란 실제로 구현된 실체를 의미한다.(메모리에 할당되어있음)
즉 인스턴스는 객체에 포함된다고 볼 수 있다. 객체로 선언되어야지만 인스턴스가 되기 때문이다.
국어적으로 생각해 보면 객체는 추상적인 개념이라면 인스턴스는 실체화가 되어야 하므로 구체적인 개념이 되어야 한다.

ex) class 내부에서 Animal cat, dog 라고 선언하면 객체를 생성하는 것이고
      cat = new Animal(); 이런 식으로 쓰면 Animal 클래스의 인스턴스를 생성하는 것이다.

-클래스와 초기화
객체생성이 불리게 되면 class 내의 init이 불리게 된다.(initalizer block)

-scope와 shadowing
변수는 함수 scope내에서만 적용된다.(사용가능하다) 다른 함수에서는 다시 초기화되는 것이다. 그래서 같이 쓰고 싶으면 global로 선언해서 값을 바꾸는 방식도 가능할 것 같다.

-해당클래스 내의 파라미터를 사용하고 싶으면 생성자를 사용해야 한다.
ex) this.firstName = firstName;
여기서 this는 class를 가리키는 것이라고 생각하면 된다. class내의 변수에 접근할때는 항상 생성자로 접근해야 한다.

-lateinit(늦은 초기화)
lateinit을 사용할때 변수를 초기화하기 전에 사용하지 않는다.

- get, set  => 조금 더 알아보기
->우리가 값에 대한 customize를 할 수 있다.

-데이터 클래스
매개변수가 최소 한개이상 필요하다.
그리고 모든 클래스는 한번은 상속받는다. -> 이 말이 내부 라이브러리를 사용할 수 있는 이유인가?(결국 내부 라이브러리를 사용하기 해서는 한번은 다른 내장class 를 상속받는 것인가?) ->Any class에게 상속받는다.
여기서 설명하는 내용이 그냥 상속 + 오버라이딩 느낌 아닌가?

-상속
서브클래스(=자식 클래스= 파생 클래스), 슈퍼클래스(=부모 클래스=기본 클래스)로 크게 나뉜다. 

open class만이 상속이 가능하다.

ex) open class Car()
     class ElectricCar : Car() 이런  식으로 상속한다.

ElectricCar에 아무런 함수가 없더라도 Car의 함수를 모두 사용할 수 있다.


- 다형성

다형성이란 비슷한 특성을 가진 객체들이 공통된 방법으로 여겨지는 것이다.
(하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미)

ex ) Parent와 Child class가 있다고 가정해보자.

Parent cp = new Child(); //가능

Parent ch = new Parent();  //가능

Child ck = new Child(); //가능

위의 3가지 경우는 모두 성립가능한 객체선언이다.(위의 경우만 보더라도 하나의 객체가 여러 타입을 가질 수 있다.)

Child cl = new Parent(); //불가능

하지만 위의 경우 자식 클래스 타입의 참조 변수로는 부모 클래스 타입의 인스턴스를 참조할 수 없다.

단순히 말하면 부모는 자식의 인스턴스를 참조할 수 있지만 자식은 부모의 인스턴스를 참조할 수 없다.(약간 상속하고 반대되는 느낌으로 이해하면 괜찮을 것 같다. 상속의 경우 자식이 부모의 모든 것을 쓸수 있지만 자식에서 수정한 것을 부모가 알 수 없는 것과 반대로 다형성은 부모는 자식을 알지만 자식은 부모를 모르는 느낌?이기 때문이다.)

---> 만약 개념적으로 틀린 생각이라면 지적 부탁드립니다.

 

<다음 목표>

1. get, set 알아보기

2. 남은 강의 보고 정리하기

3. list , arr ,list arr 차이점 알아보기