다형성이란? 하나의 객체가 많은 형(타입)을 가질 수 있는 성질이다. 상속 관계에 있을 때, 조상 클래스의 타입으로 자식 클래스 객체를 참조할 수 있다. 다형성의 활용1 다른 타입의 객체를 다루는 배열 다형성으로 다른 타입의 데이터 (Person, SpiderMan)을 하나의 타입으로 통일하여 하나의 배열로 관리 할 수 있다. Object의 배열은 어떤 타입의 객체라도 다 저장할 수 있다. 기본형인 int는 담을 수 있을까? → 오토 박싱을 통해 자동으로 감싸준다. Wrapper class인 Integer 형태로 담는다. 다형성의 활용2 매개변수의 다형성 public void println(Person p){...} public void println(SpiderMan sp){...} println을 사..
데이터 은닉과 보호(Encapsulation) 변수는 private으로 접근을 막고, getter / setter 메소드를 통해 접근하도록 하는 것 → getter/setter 메서드를 통해 데이터를 보호한다. 싱글톤(Singleton) 객체를 구별할 필요가 없는 경우에 사용한다. 객체를 계속 생성/삭제 하는데 많은 비용이 들어서 재사용이 유리한 경우에 사용한다. 외부에서 생성자에 접근 금지 → 생성자의 접근 제한자를 private으로 설정 내부에서는 private에 접근 가능하므로 직접 객체 생성 → 멤버 변수이므로 private으로 설정 외부에서 private 멤버 변수에 접근 가능한 getter 생성. setter는 불필요(외부에서 값을 설정할 수 없음) 객체 없이 외부에서 접근할 수 있도록 get..
제한자란? 클래스, 변수, 메소드 선언부에 함께 사용되어 부가적인 의미를 부여하는 것 접근 제한자 - public, protected, default, private 제한자 접근 가능 범위 같은 클래스 같은 패키지 다른 패키지의 자손 클래스 전체 public O O O O protected O O O default(package) O O private O 그 외 제한자 static : 클래스 레벨의 요소 설정 final : 요소를 더 이상 수정할 수 없음 abstract : 추상 메소드 및 추상 클래스 작성 synchronized : 멀티스레드에서의 동기화 처리 하나의 대상에 여러 제한자를 조합 가능하나 접근 제한자는 하나만 사용 가능하다. 💡 final을 쓰는 이유는? → 이미 잘만들어져있기 때문에 괜..
상속이란? 상위 클래스의 멤버를 자식 클래스에서 재사용하기 위한 것 → 상위 클래스의 멤버를 물려받기 때문에 코드의 절감 → 상위 클래스의 코드를 변경하면 모든 하위 클래스들에게도 적용되므로 유지 보수성 향상 상위 클래스의 생성자와 초기화 블록은 상속하지 않는다. extends 키워드를 사용하여 상속한다. 상속의 관계는 is a 관계라고 한다. Person is a Object, SpiderMan is a Person 모든 클래스는 Object 클래스를 상속하고 있다. extends의 선언이 없는 클래스는 extends Object가 생략된 것이다. 자바는 단일 상속만 지원한다. 두 개의 상위 클래스에 동일한 이름의 메서드가 있을 경우 복잡해질 수 있기 때문이다. 이를 극복하기 위해서 interface와..
변수의 종류 타입에 따른 분류 기본형(primitive type) - boolean, byte, char, short, int, long, float, double 참조형(reference type) - 기본형을 제외한 나머지. String, int[] 등 선언 위치에 따른 분류 멤버 변수 - 클래스 멤버 변수, 인스턴스 멤버 변수 지역변수 - 지역 변수, 파라미터 변수 public class VariableTypes { int instanceVariable; //인스턴스 멤버 변수 static int classVariable; //클래스 멤버 변수 public static void main(String[] args) { //파라미터 변수 int localVariable = 10; //로컬 변수 for(..
클래스와 객체의 관계 현실의 객체가 갖는 속성과 기능은 추상화되어 클래스에 정의된다. 클래스는 구체화되어 프로그램의 객체(instance, object)가 된다. 클래스 객체를 정의해 놓은 것. 객체의 설계도이다. 직접 사용할 수 없고, 객체를 만들기 위한 틀을 제공한다. 객체의 데이터 타입이라 할 수 있다. 객체 클래스를 데이터 타입으로 하여 클래스를 구체화 한 것이다. 실제로 동작한다. 메모리에 생성된다. 객체 생성될 때 메모리에서는 어떻게 동작될까? metaspace 클래스 정보 (타입 정보, 필드 정보, 메서드 정보) stack 메서드들의 실행 공간이다. thread 별로 별도 관리한다. 메서드 호출 시 마다 메서드 프레임이 적층된다. 메서드 프레임에 로컬 변수도 쌓이는 구조이다. heap 객체를..
객체지향 프로그래밍이란? 객체 / 지향 / 프로그래밍를 나눠서 의미를 분석해보자. 객체란, 현실에서 존재하거나 생각할 수 있는 모든 것이다. 객체는 속성과 기능으로 구성되어 있다. 지향이란, '향하다'라는 의미로, 객체지향은 객체를 중심으로 한다는 뜻이다. 프로그래밍이란, 컴퓨터에게 특정 작업을 수행하도록 지시하는 일이다. 따라서 "객체지향 프로그래밍"은 "객체를 중심으로 한 방식으로 프로그래밍하는 것"이다. 우리가 살아가는 일상생활이 객체지향이라고 볼 수 있다. A가 B에게 꽃을 전달하고 싶다. A는 꽃에 대한 전문적인 지식이나, 택배 경로에 대한 전문적인 지식이 필요하지 않다. 꽃집이라는 객체와, 택배사라는 객체를 사용하기 때문이다. 객체지향 프로그래밍의 장점 블록(레고) 형태의 모듈화된 프로그래밍 ..
생성자 객체를 생성할 때 호출되는 인스턴스 초기화 메서드 new 키워드와 함께 호출 Person person1 = new Person(); 일반 멤버 변수의 초기화나 객체 생성 시 실행돼야 하는 작업 정리 클래스 이름과 동일 리턴 타입이 없음 기본 생성자(default constructor) 파라미터가 없고 구현부가 비어있음 생성자 코드가 없으면 컴파일러가 기본 생성자 제공 public class DefaultPerson { String name; int age; boolean isHungry; //public DefaultPerson() {} -- 생략된 기본 생성자 public static void main(String\[\] args){ DefaultPerson person = new Default..