본문 바로가기

전체 글191

[자바의 정석] Chapter 7 객체 지향 프로그래밍II(2) - 오버라이딩(overriding) 오버라이딩이란? o 조상 클래스로부터 상속받은 내용을 변경하는 것을 오버라이딩이라고 한다. 상속받은 메소드를 자손 클래스 자신에 맞게 변경해야 하는 경우 오버라이딩을 한다. class Point{ int x; int y; String getLocation() { return "x : " + x + "y : " + y; } } class Point3D extends Point{ int z; String getLocation() { // 오버라이딩 return "x : " + x + "y : " + y + "z : " + z; } } - Point 클래스는 2차원 좌표였으나 Point3D는 3차원 좌표이기에 z축 멤버 변수가 추가되었다. 따라서 getLocation()메소드 호출 시 z축에 대한 값도 출력을.. 2021. 2. 16.
[자바의 정석] Chapter 7 객체 지향 프로그래밍II(1) - 상속 상속의 정의와 장점 o 기존의 클래스를 재사용하여 새로운 클래스는 작성하는 것을 상속이라 한다. 상속을 사용하여 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 사용하기에 코드의 추가 및 변경이 용이하다. o 코드의 재사용성을 높이고 중복을 제거하여 생산성과 유지보수에 기여한다. o 상속을 하는 방법은 새로 작성하는 클래스 이름 뒤에 ‘extends’키워드와 상속받는 클래스의 이름을 적어주면 된다. class Child extends Parent { // Parent클래스를 상속받음 } o 상속해주는 클래스를 ‘조상 클래스’라고 하고 상속받는 클래스를 ‘자손 클래스’라고 한다. 클래스 관계는 부모 자식 관계만 있으며 형제 관계는 존재하지 않는다. 조상 클래스 : 부모(parent.. 2021. 2. 16.
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(6) - 변수의 초기화 변수의 초기화 o 변수를 선언하고 처음으로 값을 저장하는 것을 ‘변수의 초기화’리고 한다. 변수의 초기화는 선택적이지만 가능하면 선언과 동시에 초기화 하는 것이 적절하다. o 멤버변수(클래스변수, 인스턴스변수)와 배열은 초기화를 하지 않을 경우 자동으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지나(선택적) 지역변수는 사용하기 전에 반드시 초기화를 해야한다. (필수적) class InitTest { int x; int y=x; //인스턴스 변수 초기화 없이 사용가능, 자동 기본값 초기화 void method() { int i; int j=i; //에러, 지역 변수 초기화 하지 않고 사용 } } o 각 타입의 기본값은 다음과 같다. 자료형 기본값 boolean false char ‘\u0000’ by.. 2021. 2. 4.
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(5) - 생성자 생성자란? o 생성자란 인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메소드’이다. 그렇기에 인스턴스 변수의 초기화 작업 및 인스턴스 생성 시 실행되어야 할 작업을 위해서 사용된다. o 생성자도 메소드처럼 클래스 내에 선언되며 리턴 값이 없다. 생성자는 리턴 값이 없는 void 키워드를 적지 않기에 아무것도 적지 않는다. 생성자의 조건은 다음과 같다. 1. 생성자의 이름은 클래스의 이름과 같아야 한다. 2. 생성자는 리턴 값이 없다. (void 키워드 작성하지 않는다.) class Card { //매개 변수가 없는 생성자 Card(){ } // 매개 변수가 있는 생성자 Card(String k, int num){ } } o 생성자도 오버로딩이 가능하기에 하나의 클래스에서 여러 개의 생성자가 존재할 수 .. 2021. 2. 4.
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(4) - 오버로딩 오버로딩(overloading) 오버로딩이란? o 한 클래스에서 메소드도 구별이 되어야 하기에 각각 다른 이름을 가져야 하나 같은 이름의 메소드가 있더라도 매개 변수 또는 타입이 다르면 같은 이름의 메소드로 정의할 수 있다. o 한 클래스 내의 같은 이름의 메소드를 여러 개 정의하는 것을 ‘메소드 오버로딩(method overloading)’ 또는 ‘오버로딩(overloading)’이라고 한다. 오버로딩의 조건 1. 메소드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다. o 메소드 이름이 같더라도 매개변수가 다르면 구별이 되기에 오버로딩이 가능한 것이다. 오버로딩 시 위의 조건을 만족시키지 못하는 메소드는 중복 정의로 간주되어 컴파일 시 에러가 발생한다. o 오버로딩은 매개 변수로만.. 2021. 2. 4.
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(3) JVM 메모리 구조 o JVM은 시스템으로부터 프로그램 실행 시 필요한 메모리를 할당 받고 메모리를 용도에 따라 분류한다. 1. 메서드 영역(Method area) or 스태틱 영역(Static area) JVM은 클래스가 실행 시 해당 클래스의 클래스 파일(.class)을 읽어서 이에 대한 정보(클래스 데이터)를 이곳에 저장한다. 클래스의 필드 부분에 선언된 전역 변수와 정적 맴버변수(static이 붙은 자료형)가 Static 영역에 저장되며 프로그램의 시작부터 종료가 될 때까지 메모리에 남아있다. 그렇기에 전역 변수가 프로그램이 종료될 때까지 어디서든 사용이 가능한 이유이긴 하나 무분별하게 사용하다 보면 메모리가 부족할 우려가 있으니 필요한 변수만 사용한다. 2. Stack area ( or Call.. 2021. 2. 3.
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(2) 변수와 메서드 선언위치에 따른 변수의 종류 o 변수가 선언된 위치에 따라 변수의 종류가 달라지기에 변수가 어느 영역에 선언되었는지를 확인하는 것이 중요하다. 변수의 종류 선언위치 생성시기 클래스 변수 (class variable) 클래스 영역 클래스가 메모리에 올라갈 때 인스턴스 변수 (instance variable) 인스턴스가 생성되었을 때 지역 변수 (local variable) 클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블록 내부) 변수 선언문이 수행되었을 때 1. 인스턴스 변수 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다. 그렇기에 인스턴스 변수 값을 읽어 오거나 저장하기 위해서는 먼저 인스턴스를 생성해야 하며 인스턴스는 독립적인 공간을 가지므로 서로 다른 값을 가.. 2021. 2. 3.
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(1) 객체지향언어의 역사 o 객체지향이론의 기본 개념은 ‘실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물 간의 상호작용이다.라는 것이다. o 1960년대 중반 시뮬라(Simula)라는 객체지향이론을 프로그래밍언어에 적용한 최초의 언어가 탄생했다. o 초반에는 절차지향 언어들에 의해 각광을 받지 못했으나 시간이 지나면서 프로그램의 규모가 커질수록 절차지향언어로는 한계점을 느껴 객체지향언어가 대안으로 떠오르면서 각광을 받기 시작했다. o 1995년에 자바가 발표되고 1990년대 말에 인터넷의 발전과 함께 크게 유행하면서 객체지향언어가 프로그래밍 언어의 주류로 자리잡았다. 객체지향언어 o 객체지향언어의 특징은 다음과 같다. 1. 코드의 재사용성이 높다 – 코드를 작성할 때 기존의 코드를 이.. 2021. 2. 3.
[프로그래머스] Level 1 – 문자열 내 p와 y의 개수 문제 설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다. 제한사항 · 문자열 s의 길이 : 50 이하의 자연수 · 문자열 s는 알파벳으로만 이루어져 있습니다. 입출력 예 s answer pPoooyY true Pyy false 입출력 예 설명 입출력 예 #1 'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다. .. 2021. 2. 1.