목록분류 전체보기 (76)
코딜기
오버라이딩(Overriding)이란?오버라이딩이란 부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하여 사용하는 것을 말합니다.이는 부모 클래스에서 정의된 메서드를 자식 클래스에서 다른 방식으로 동작하도록 변경하고자 할 때 필요합니다.만약 메서드가 자식 클래스에서 재정의되었다면, 자식 객체를 통해 메서드를 호출했을 때 부모 클래스의 메서드가 아닌, 자식 클래스에서 재정의된 메서드가 호출됩니다.오버라이딩 사용메서드 이름, 매개변수, 반환 타입이 부모 클래스의 메서드와 동일해야 합니다.부모 클래스의 메서드가 private이나 final로 선언되어 있다면 오버라이딩이 불가능합니다.접근 제한자는 부모 클래스의 메서드와 같거나 더 넓어야 합니다.public class Animal { public v..

상속(Inheritance)이란?부모 클래스가 가진 속성과 기능을 자식 클래스가 물려받는 것을 의미합니다.상속이 이루어지면 부모 클래스의 모든 필드와 메서드들이 자식 클래스에 상속되므로, 각 클래스마다 중복되는 속성과 기능을 일일이 작성할 필요가 없어집니다.상속을 통해 자식 클래스는 부모 클래스의 기능을 그대로 사용할 수 있으며, 자식 클래스만의 고유한 속성이나 메서드를 추가하여 기존 클래스를 확장할 수 있습니다.이로 인해 코드의 재사용성이 높아지고, 중복 코드가 줄어들며, 코드의 가독성과 유지보수성이 향상되는 이점이 있습니다.상속을 고려하지 않았을 때의 비효율성위 사진을 보면 각각 클래스는 다르지만, 가지고 있는 속성과 기능이 비슷한 것을 찾아볼 수 있습니다.모든 동물들 클래스가 name, age, ..
싱글톤 패턴 (Singleton Pattern)이란?단 하나의 인스턴스만 생성하도록 보장하며, 어디서든 그 인스턴스에 접근할 수 있도록 하는 디자인 패턴이다.무분별한 객체의 생성을 막고, 하나의 객체를 여러 번 재활용하여 메모리의 낭비를 막을 수 있는 디자인 패턴입니다.싱글톤 패턴 구현외부에서 이 클래스의 객체를 생성하지 못하도록 생성자를 단 1개만 선언하고, private 접근 제한을 붙입니다.생성자를 호출할 수 있는 곳은 같은 클래스 내부 뿐이므로 스스로의 객체를 단 1개만 생성합니다.외부에서 이 클래스의 객체를 요구할 시, 2번에서 미리 만들어 놓은 단 하나의 객체의 주소값을 공개된 메서드를 통해 리턴합니다.public class Singleton { // 1 private Singlet..
상수(Constant)란?상수는 고정된 불변의 값입니다.모든 객체가 해당 값을 공유할 수 있는 전역성을 가져야 하며, 동시에 값이 변하지 않는 불변성 또한 가져야 합니다.한마디로 static과 final의 성질을 둘 다 가져야 합니다.상수는 다른 일반 변수와의 차이를 위해 모든 글자를 대문자로 선언합니다.두 단어를 연결해서 선언하려면 _를 이용하여 연결해 줍니다.상수 선언누구나 공유할 수 있는 유일한 값을 보통 상수로 취급합니다.아래 예시에선 누구나 공유할 수 있는 유일한 값인 동시에 불변의 값인 지구의 반지름과 표면적을 상수로 선언해 보겠습니다.public class Earth { static final double RADIUS = 6400; static final double SURFAC..
final이란?'final' 키워드는 무언가를 제한하는 의미를 가지며, 변수, 메서드, 클래스에 적용될 수 있습니다.'final'이 어디에 선언되느냐에 따라 그 의미가 달라집니다.final + 변수 : 변수가 한번 초기화되면 값을 변경할 수 없고, 상수처럼 작동합니다.final + 메서드 : 메서드를 재정의할 수 없고, 상속된 클래스에서도 더 이상 오버라이드되지 않습니다.final + 클래스 : 클래스를 상속할 수 없고, 더 이상 확장이 불가능하며, 다른 클래스가 이 클래스를 기반으로 파생될 수 없습니다.final 사용 (필드)Person라는 클래스를 하나 만들고 내부에 인스턴스 변수와 'final' 키워드를 사용한 변수를 추가하겠습니다.'final' 변수는 반드시 선언과 동시에 초기화되거나 생성자를 통..

static이란?static이라는 키워드는 필드와 메서드에 붙일 수 있습니다.모든 객체가 공유해도 문제가 없는 필드나 메서드에 붙입니다.객체에 소속된 멤버가 아니라 static이 저장되는 공간이 따로 있다고 생각하면 이해가 쉬울 것입니다.static 사용 (필드)간단한 예제 코드로 static을 사용해 보겠습니다.Count라는 클래스를 하나 만들고 내부에 변수 두 개를 선언하는데, 하나에만 static을 추가하겠습니다.public class Count { public int a; //인스턴스 필드 public static int b; //정적 필드}이후 main 메서드에서 Count 객체를 생성한 후에 값을 변경해 보겠습니다.Count c1 = new Count();c1.a += 5;c1.b ..
캡슐화(Encapsulation)란?캡슐화란 객체의 상태와 동작을 하나의 단위로 묶어서 구현하는 것을 의미합니다.즉, 하나의 목적을 이루기 위해 관련 있는 모든 것들을 하나의 캡슐에 담아 두는 것을 의미합니다.캡슐화를 고려하지 않았을 때의 비효율성차에 시동을 거는 과정을 각각의 public 메서드로 정의를 했습니다.public class Car { // 시동 거는 기능 public void engineStart() { System.out.println("시동 버튼을 눌렀습니다."); System.out.println("시동이 걸렸습니다."); } // 엔진오일이 주입되는 기능 public void injectOil() { System.out..
정보은닉(Infomation Hiding)이란?정보 은닉이란 객체의 상태를 숨기고 외부에서 접근할 수 없도록 보호하는 것을 의미합니다.정보 은닉을 사용하면, 객체의 필드에 불필요한 값이나 문제가 발생할 수 있는 값들이 직접 들어오는 것을 막을 수 있습니다.그렇기 때문에 접근 제한자를 적절하게 이용하여 직접적인 접근을 막고, 메서드를 통해 접근하게 하는 것이 정보 은닉입니다.정보은닉을 고려하지 않았을 때의 문제점public class Car { String model; // 모델명 int speed; // 현재 속도 public Car(String model) { this.model = model; }}위와 같은 Car 클래스가 있고, 이를 통해 Car의 속성을 가진 테슬..
생성자(Constructor)란?자바에서 객체를 생성할 때 호출하는 것이 생성자입니다.한마디로 생성자는 객체를 생성하는 역할을 합니다.생성자의 특징생성자의 이름은 클래스의 이름과 대/소문자까지 완벽하게 동일해야 합니다.객체를 생성할 때 반드시 호출해야 합니다.일종의 메서드지만, 리턴 타입이 없고 리턴값은 주소값으로 고정되어 있습니다.생성자를 하나도 선언하지 않으면, JVM이 매개변수가 없고, 내용이 없는 가장 기본 형태의 생성자를 하나 생성해 주기 때문에 생성자 선언 없이도 객체 생성은 가능합니다.객체를 생성하는 기능뿐만 아니라, 객체 생성과 동시에 해야 할 일 (필드 초기화) 등을 진행할 수 있습니다.생성자는 오버로딩(Overloading)이 가능합니다.생성자 사용펜 객체를 만드는 클래스를 정의하고, ..
객체(Object)란?객체란 데이터와 그 데이터를 처리하는 함수들을 묶어놓은 하나의 독립적인 단위입니다.객체를 사용하면 코드의 가독성이 좋아지고 유지보수가 편리해집니다.또한 객체 지향 프로그래밍은 코드 재사용성이 높아지고 대규모 프로그램을 개발할 때 유용합니다.객체를 사용하지 않았을 때의 비효율성색깔, 품번, 가격의 속성을 가지고 있는 펜을 제작한다고 가정합니다.빨간 펜, 파랑 펜, 검정 펜을 만들기 위해서는 아래와 같이 각각 변수명을 다르게 해서 만들어야 합니다.//빨간 펜int redPenPrice = 500;String redPenColor = "빨강";String redPenNo = "a001";//파랑 펜int bluePenPrice = 800;String bluePenColor = "파랑";..