본문 바로가기

전체 글213

String은 참조 타입인가요? 안녕하세요! 🐥 오늘은 잠깐 String에 대해 이야기 해보려고 합니다. 정확히는 제가 공부를 하며 헷갈렸던 부분에 대해 이야기 해보겠습니다. Java를 배우면 primitive type(int, long, double, ...)과 String에 대해 가장 먼저 배우게 됩니다. 데이터 활용에 기본이 되는 형태이기 때문입니다. 그런데 String은 primitive type(기본 타입)과는 다르게 class라는 사실도 알고 계셨나요? String은 기본 타입은 아니지만 굉장히 사용 빈도가 높기 때문에 특별히 class로 제작되어 사용되는 타입입니다. Class는 reference type이기 때문에 인스턴스를 만들면 변수에는 데이터 자체가 저장되는 것이 아니라 데이터가 저장된 주소를 담게 된다는 것입니다... 2022. 5. 8.
Interface(인터페이스) 알아보기(1) Class에 대해 배우면서 Class가 object(객체)를 만들기 위한 템플릿이라는 것을 알 수 있었습니다. 그런데 이러한 class를 만들기 위해 존재하는 템플릿도 있는데요, 그것이 바로 interface(인터페이스)입니다. 사실 interface는 inheritacne(상속)의 한계를 극복하고자 등장한 개념이라고 합니다. 상속의 한계에는 뭐가 있었을까요? 바로 하나의 class만 상속이 가능하다는 점이 있었습니다! (그런 한계 때문에 composition 사용을 장려한다고도 했었죠.) 하지만 사람들은 그래도 여러 클래스의 기능들을 불러와서 사용하고 싶었나 봅니다. 아마도 동일한 코드를 반복하여 작성하지 않기 위해서겠죠? 그래서 interface라는 개념이 등장하게 되었습니다. Class를 상속할 때.. 2022. 5. 7.
Autoboxing & Unboxing 지난번에 알아보았던 ArrayList 기억나시나요? ㅎㅎ ArrayList를 생성하기 위해서는 안에 type을 명시해주어야 했습니다. ArrayList 이런 식으로 말이죠. 만약에 integer type을 담는 ArrayList를 만들고 싶다면 어떻게 해야할까요? ArrayList 아닐까요? 하지만 안에는 class type이 들어가야 하기 때문에 위에 처럼 표시를 하게되면 에러가 발생합니다. 변수를 선언할 때 사용하던 int가 아닌 'Integer' 라는 class를 사용해주어야 합니다. double, boolean, byte 등 primitive type에는 모두 "wrapper class"가 있습니다. (Class 여서 그런지 맨 앞 레터를 대문자로 표시하고 있습니다.) 이렇게 primitive t.. 2022. 5. 5.
ArrayList Array는 생성 시에 그 크기를 정해야 합니다. 물론 크기를 늘릴 방법이 있기는 하지만 데이터 양이 많을 수록 작업이 쉽지 않게 됩니다. 배열과 유사하면서도 크기를 자동으로 조절해 주는 도구가 바로 ArrayList입니다. 자동으로 크기가 조절되기 때문에 배열 생성 시의 크기를 정하지 않아도 됩니다. private ArrayList myArrayList = new ArrayList(); ArrayList는 다른 타입의 변수들 선언과 모양이 살짝 다른데요, 안에 type of Object를 명시해주면 됩니다. 맨 뒤에 ()는 empty constructor인데, ArrayList가 class 이기 때문에 자신만의 constructor를 가지고 있는 것이라고 합니다. 보시다시피 안에 들어갈 데이터 .. 2022. 5. 3.
Array-배열 배열은 동일한 타입의 변수들을 하나의 묶음으로 다룰 수 있도록 해주는 도구입니다. 일일이 변수를 만들지 않고도 많은 양의 데이터를 다룰 수 있기 때문에 상당히 편리하죠! 배열의 선언과 생성 배열을 선언하고 생성하는 방법은 다양한데, 많이 사용되는 몇가지 방법들은 다음과 같습니다. 1 2 3 4 //배열 선언 int[] arr; //배열 생성 arr = new int[5]; cs 하지만 보통은 생성과 배열을 한 번에 진행합니다. 1 2 //배열 선언과 생성을 한번에 int[] arr = new int[5]; cs 아래와 같이 생성 시에 데이터를 같이 생성할 수도 있습니다. (이 방법은 배열 변수를 선언할 당시에만 가능한 방법입니다.) 1 2 int[] arr = {1,2,3,4,5}; cs 또 많이 사용되.. 2022. 5. 2.
Class(7)-Up-casting & Down-casting (형변환 업캐스팅, 다운캐스팅) 지난번 ploymorphism에 대해 이야기 했을 때 up-casting이라는 용어가 나왔습니다. Up-casting은 자손 타입을 조상 타입으로 형변환하는 것을 의미합니다. 반대로 down-casting은 조상 타입에서 자손 타입으로의 형변환을 의미합니다. 한 번 도표로 살표보면 이렇게 나타낼 수 있습니다. (도표 추가) Class 간의 casting은 서로 상속관계에 있는 클래스 사이에서만 가능합니다. 그렇지만 Up-casting(자손->조상)은 항상 가능하지만 down-casting(조상->자손)은 문제를 일으킬 수 있습니다. 그 이유는 조상 클래스와 자손 클래스가 가지고 있는 인스턴스의 수* 때문입니다. 자손 클래스는 조상 클래스를 상속하였기 때문에 조상 클래스의 인스턴스를 모두 상속받게 되죠? .. 2022. 5. 1.
Class(6)-Polymorphism(다형성) 이번에는 class의 핵심 요소 중 하나인 Polymorphism(다형성, 多形性)에 대해서 알아보겠습니다. 다형성이라는 특성 때문에 부모 클래스 타입의 참조변수로 자식 클래스의 인스턴스를 참조할 수가 있습니다. 지금까지 클래스 타입의 참조변수를 만들 때는 참조변수의 타입과 인스턴스 타입이 일치했습니다. 예를 들어서, 1 2 Movie movie = new Movie(); ForrestGump forrestGump = new ForrestGump(); cs 위와 같은 형태였습니다. 하지만 다형성을 이용하면, 두 클래스가 상속관계라는 전제 하에 부모 클래스의 참조변수로 자식 클래스 인스턴스를 참조할 수가 있습니다. (여기에서는 Movie class 가 부모 클래스, ForrestGump가 자식 클래스 입니.. 2022. 4. 29.
Class(5)-Encapsulation(캡슐화)란? 사용 방법과 이유 OOP에는 inheritance, encapsulation, polymorphism, abstraction 이라는 네가지 핵심개념이 있습니다. Encapsulation도 이 핵심 개념 중 하나에 해당하는데요, 어떠한 의미일까요? 먼저 이름에서 느껴지다시피 무언가 안에 담아 두는 것 같다는 생각이 듭니다. 실제로 encapsulation은 class 내부의 variable(data)들을 method로 감싸서 variable과 method를 하나의 유닛으로 묶어주는 것입니다. 이렇게 되면 variable에 접근하기 위해서는 method를 통할 수 밖에 없게 됩니다. 하나의 유닛으로(capsule) variable를 감싸놓는 이유는 다른 클래스에서 variable에 즉, 데이터에 직접적으로 접근하는 것을 방지.. 2022. 4. 28.
Class(4)-Composition Composition이란 Inheritance(상속)가 class간 부모-자식 관계를 만들어 주었다면, Composition(조합)은 class 들끼리 서로의 구성요소가 될 때 각 class가 가진 fields나 methods를 사용할 수 있도록 하는 방법입니다. "has a" 관계일 때 사용한다고 말하기도 하는데요 (inheritance는 "is a" 관계). 예를 들어서, 고양이와 눈(eyes)의 관계는 무엇일까요? 고양이가 눈을 가지고 있다 (A cat has eyes) 라고 할 수 있겠죠. 고양이가 눈이거나 눈이 고양이인 것은 아닙니다(is a 관계가 아니라는 말입니다). 그러므로 이런 경우에는 inheritance를 사용하기보다는 composition을 사용해야 적절합니다. 이번에는 한 번 Co.. 2022. 4. 27.
반응형