다형성이란 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 다형성을 통하면 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있다. 자바에서는 다형성을 위해 부모 타입에 모든 자식 객체가 대입될 수 있게 한다. public class PhoneTest{ Phone phone1 = new IPhone(); Phone phone2 = new SPhone();//자식 객체가 부모의 타입인 Phone에 대입되었다. } 자동 타입 변환은 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다. 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있다는 것이 바로 자동 타입 변환의 개념이다. public class Animal{ } public..
접근 제한자에는 public , protected, default, private 이렇게 4 가지가 있다. public 클래스, 필드, 생성자, 메서드를 선언할 때 public을 붙이면 public 접근 제한을 가진다. public 접근 제한을 가지게 되면 같은 패키지 내에서 뿐만 아니라 외부 패키지에서도 사용할 수 있다. default 클래스, 필드, 생성자, 메서드를 선언할 때 public을 생략한다면, default 접근 제한을 가진다. default 접근 제한을 가지게 되면 같은 패키지 내에서만 사용할 수 있다. protected protected 제한자는 public과 default 접근 제한의 중간쯤에 해당된다. 같은 패키지 내에서는 접근 제한이 없지만, 외부 패키지에서는 자식 클래스만 접근을..
final 키워드는 클래스, 필드 , 메서드 선언 시에 사용할 수 있다. 필드 선언 시에 final을 붙이면 초기값으로 설정되어, 더 이상 수정할 수 없다는 것을 앞에서 확인 했었다.(like 상수) 그러면 만약 final 키워드를 클래스와 메서드 선언 시에 붙이면 어떻게 될까? public final class String{ ... } String 클래스는 자바 표준 api에서 제공하는 대표적 final 클래스이다. 이처럼 클래스를 선언할 때 final을 붙이면 이 클래스는 최종적인 클래스로 되어서 상속을 할 수가 없다. 따라서 final 클래스는 상속을 하지 못하므로 , 자식 클래스도 없고 부모 클래스도 아니다. public final class Food extends{//Food 클래스는 final..
저번에 지원했던 네이버 커넥트 재단의 파이썬 코딩 스터디에서 드디어 메일이 왔다. 리드부스터로 지원하였었는데 다행이게도 리드 부스터로 선정되었다. 리드 부스터라고 따로 엄청 비중있는 역할이 주어지는 것은 아니지만, 팀원들과 같이하는 스터디 활동에 기대가 되면서도 리드 부스터라는 책임감에 걱정되기도 한다. 부스트 코스 코칭 스터디에서는 SLACK 이라는 프로그램을 통해 서로 간에 소통을 하는 거 같다. 나도 이번에 처음 써보았는데, 익숙하지 않아서 그런지 아직은 조금 불편한 감이 없지않아 있다. 그리고 조금 전에 팀원 톡방이 개설되었다. 우리 팀 구성은 나(리드부스터), 팀원(5명) 그리고 코딩 코치 1명, 이렇게 7명이다. 코딩 코치는 우리 팀이 공부하고 부스트코스 측에서 내주는 미션을 해결하면, 그걸 ..
부모 클래스가 자식 클래스에게 상속 할 때에는 필드 뿐만 아니라 메서드까지 넘겨준다. 만약 부모 클래스의 메서드가 자식 클래스에 맞게끔 설계되어 있지 않다면, 이 메서드를 다시 수정해 줄 필요가 있다. 이러한 경우에 사용하는 것이 바로 메서드 오버라이딩 이다. public class Fruit{ public void introduce(){ System.out.println("I'm fruit"); } } public class Apple extends Fruit{//Fruit의 자식 클래스 Apple public void introduce(){//Fruit의 introduce 메서드를 오버라이딩을 통해 재정의 했다. System.out.println("I'm apple"); } } lFruit은 Appl..
상속 Java에서 상속은 현실에서 부모가 자식에게 물려주는 상속이랑 매우 유사하다. 상송을 통해 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다. 클래스를 재사용해서 새로운 클래스를 만들기 때문에 시간과 코드의 중복을 줄여주기 때문에 보다 효율적이다. class Product{ int count; String color; } class CellPhone extends Product{ String name; } CellPhone클래스는 Product 클래스를 상속 받는다. 따라서 CellPhone의 멤버로는 Product클래스의 멤버인 count와 color를 기본적으로 가지면서, 추가적으로 따로 선언해주었기 때문에 name 필드도 가진다. class CellPhone extends Product, ..
객체 생성 클래스를 완성시킨 다음, 객체를 생성할 때는 new ( )를 사용한다. new는 클래스로부터 객체를 생성시키는 연산자로, new 연산자 뒤에는 생성자가 온다. new 연산자를 사용하면 힙 영역에 객체를 생성한 뒤, 객체의 주소를 클래스 타입의 변수에 저장한다. //클래스 변수 = new 클래스(); public class Student{ }//클래스 선언 Student s1 = new Student(); Student s2 = new Student(); Student 클래스는 하나이지만 new 연산자를 사용한만큼 객체가 메모리에 생성된다. 비록 같은 클래스로부터 생성되었지만 s1, s2 각각의 객에는 자신만의 고유 데이터를 가진다. 즉, s1과 s2가 참조하는 Student 객체는 완전히 독립..
객체 지향 프로그램의 특징으로는 캡슐화, 상속, 다형성 이 세가지를 들 수 있다. 이들 특징은 추후에 학습을 하다 보면 자연스레 알게 되지만, 개념부터 먼저 살펴보고자 한다. 캡슐화 캡슐화란 객체의 필드, 메소드를 하나로 묶고 실제 구현 내용을 감추는 것을 의미한다. 따라서 외부의 객체는 객체 내부의 구조를 알지 못하고 객체가 노출시키는 필드와 메소드만 이용 가능하다. 이러한 특징은 외부의 잘못된 사용으로 인해 객체가 손상되는 것을 방지하기 위한 목적이다. 자바에서는 캡슐화된 멤버의 노출 여부를 접근 제한자를 통해 결정한다. 나중에 살펴볼 접근 제한자는 객체의 필드와 메소드의 사용 범위를 제한한다. ex) 클래스 내에서만 이용 상속 상속이란 우리가 흔히 알고 있듯이 부모가 가지고 있는 것을 자식에게 물려..
변수는 한 개의 데이터만 저장할 수 있다. 그렇기 때문에 만약 변수 100개를 선언하고 각 변수의 합을 구해야 한다면,, 정말 귀찮은 일임이 분명하다. 이럴 때 유용하게 사용할 수 있는 것이 바로 배열이다. 배열이란 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스를 부여해 놓은 자료구조이다. 배열을 사용하기 위해서느는 우선 배열 변수를 선언해줘야한다. " 타입 [ ] 변수 ; " 또는 " 타입 변수 [ ] ; " 대괄호 [ ]는 배열 변수를 선언하는 기호로, 타입 뒤나 변수 뒤에 붙을 수 있다. 타입은 배열에 저장될 데이터 타입을 말한다. int[] intArray; String strArray[]; 이러한 배열 변수는 참조 변수에 속한다. 다른 객체들과 마찬가지로 배열도 힙 영역에 ..
객체는 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말한다. 예를 들면 자동차, 자전거, 피자, 학과, 강의 등이 모두 객체가 될 수 있다. 이러한 객체는 속성과 동작으로 구성되어 있다. 예를 들자면 TV리모컨은 색깔, 크기와 같은 속성을 가지고 볼륨키우기 줄이기 전원 끄기 켜기 같은 동작을 가진다. 객체에서는 이러한 속성과 동작을 각각 필드, 메소드라고 부른다. 그리고 이런 객체에 대한 설계도를 클래스라고 한다. 즉 클래스는 특정 종류의 객체들을 찍어내는 틀이라고도 할 수 있다. ex) 클래스 = 와플기계, 객체 = 와플 하나의 클래스로 여러개의 객체, 즉 인스턴스를 찍어내지만 인스턴스 각각의 속성의 값은 모두 다르다. 클래스를 선언하는 방법은 다음과 같다. 먼저 클래스 이름을 정하고 그 이..