프로그래밍/JAVA 22

[JAVA의 정석]6_객체지향개념_클래스와 인스턴스

역시 백엔드 개발자는 자바지! 열심히 익혀보자. 기말고사 전까지 객체지향의 개념과 자바(제네릭, 쓰레드)등 를 이해하는 것이 목표! 일론머스크는 어떻게 항공 쪽은 아는게 없지않느냐 어떻게 사업을 했냐는 질문에 그는 관련 책을 읽었다. 라고 했다. 나도 프로그래머가 되기 위해서 책을 읽자 라는 생각이 들어 자바의 정석이라는 책을 읽고 익힐것이다. 객체지향언어는 - 코드의 1. 재사용성이 높고, 2. 관리(유지보수)가 용이하며 3. 신뢰성이 높은 프로그래밍을 가능하게 한다. - 코드 간에 서로 관계를 맺어 줌으로써 유기적으로 프로그램을 구성할 수 있다. 클래스는 ' 객체를 정의해놓은 것'이다. 또는 ' 객체의 설계도 또는 틀'을 의미한다. '상태'와 '행위'를 가지는 자바의 기본단위이다. 그리고 그대로 객체..

JAVA - 메소드 오버라이딩[overriding]과 오버로딩

1. 오버라이딩 이란? ; _ 사전적인 뜻 : 다른 무엇보다 더 중요한 부모클래스에게 상속받은 메서드를 자식클래스에 맞도록 수정하는 것 (상속관계에서) 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부(메서드 이름, 매개변수의 개수 및 타입, 반환타입)는 부모 클래스와 완전히 일치해야한다. 부모 클래스에 있는 메서드를 자식 클래스에서 선언하면 자식 클래스의 메서드만 실행된다. 2. 오버라이딩의 규칙 1) 부모클래스의 메서드와 동일한 시그니쳐와 반환타입을 가진다. -> 구현 부분에서만 다르다. 2) 오버라이딩된 메서드는 부모클래스보다 접근 범위를 좁게 변경할 수 없다. -> 접근 제어자에는 4가지가 있다. 큰 순서대로 Public, Protected, Default, Private 만약..

Java - 상속[extends]

1. 상속이란? 기존의 클래스에 extends 키워드를 이용해 재사용하여 새로운 클래스를 만드는 것이다. 재사용을 하며 그대로 사용할수도 있고, 새로운 멤버를 추가할수도 있다. 코드의 재사용성이 높으며 변경 및 추가가 용이하다. 기존의 클래스를 부모클래스, 상속을 받아 생성된 클래스를 자식클래스라고 한다. 자식클래스는 부모클래스의 모든 멤버를 상속받는다! ✔Java에서는 한개의 클래스만을 부모 클래스로 갖는 단일상속만 가능한다. ✔상속관계를 [Is - a ]관계라고 한다. ex ) 원은 도형이다. 치타는 동물이다. 2. 예제 코드 class Tv{ // 부모 클래스 boolean power; int channel; void power() { power = !power; } void channelUp(){..

java - 객체 배열(9)

객체를 여러개 다룰때 배열로 다루면 개별로 관리하는 것보다 편리하다. 이를 객체 배열이라고 한다. 1. 객체 배열 객체 배열안에 객체가 들어가는 것이아니다! 객체의 주소가 들어가므로 객체 배열은 참조변수의 배열이라고 생각하면 편하다. Ball[] ball = new Ball[5]; -> Ball객체를 5개 생성하는 것이 아닌 5개의 Ball 객체를 참조할 변수 5개를 만든것이다. -> Ball객체를 생성한 후에 주소를 각 참조변수에 대입해야한다. 예제 코드 ) public class CircleArrayDemo { public static void main(String[] args) { Circle[] circle = new Circle[5]; // Circle 객체 5개를 저장할 참조변수의 배열 생성 ..

Java - 동적배열[ArrayList](8)

앞서 포스팅한 배열은 정적배열이다. 처리할 데이터의 개수가 정해진 경우 정적배열을 사용하면 편하지만 고정되어있지 않을때 괜히 자리를 만들고 사용을 하지 않는등 자원을 낭비할수있다. 그 해결을 위해서 동적배열을 사용한다. [ "확장 가능한 배열"] Collection 인터페이스를 확장하는 인터페이스는 List, Queue, Set이 있다. 그중 List인터페이스를 구현한 클래스가 ArrayList이다. 동적배열은 크기가 유동적인 배열이다. 자바는 이를 위해 ArrayList 클래스를 지원한다. 컬렉션 프레임워크를 설명하기전이기에 간단하게 동적 배열의 개념에서만 설명할것이다! 1. ArrayList 객체 생성 ArrayList list = new ArrayList(); -> ArrayList 참조변수 = n..

JAVA - 배열의 선언과 생성(7) + String

java에서는 C++의 배열 생성과 달리 'new' 키워드를 이용해 배열을 만든다! 1. 배열 배열을 만들때 두가지의 과정을 거친다. 1. 선언 2. 생성 int는 기본자료형이지만 int 의 배열은 참조자료형이다. 모든 배열은 참조 자료형이다!! 배열은 무조건 선언할 때 크기가 지정되어야만 한다. 이 단점을 보완하기 위해 자바에는 Collection이 존재한다. 1. 선언은 배열을 다루기 위한 참조변수를 선언하는 것이다. (참조변수는 주소가 저장되어있다.[배열의 첫주소]) 2. new를 이용해 배열의 타입(ex. int) 와 길이를 지정해준다. (실제 저장공간을 생성한다.) int[] scores; //1.배열의 선언 scores = new int[5]; //2. 배열의 생성 참고로 배열의 선언부에 붙는..

java - 문자열[==,!=,compareTo, equals](6)

1. 문자열 문자열은 자바에서 기본적으로 제공하는 클래스인 String 타입을 사용한다. String s1 = "안녕 java"; -> s1은 내부적으로 new String("안녕 java")를 호출해 생성한 객체이다. -> "안녕 java"를 문자열 리터럴이라고 한다. String s2 = "안녕 java"; 가 추가된다면 내용이 같으므로 s2라는 객체를 새롭게 생성하는 것이 아니라 기존의 문자열 리터럴을 공유한다. 즉 s1과 s2는 동일한 객체를 가리킨다! 2. 문자열의 비교 일반적으로 비교연산에 사용하는 "==" 와 "!="는 문자열을 비교할때 다른 의미로 사용한다. 문자열이 동일한지 비교하는 것이 아니라 동일한 객체인지 검사하는 것이다. public class String1Demo { public..

자바 - 정적멤버[static](5)

static은 한단어로 말하면 "공유"이다. -> 클래스의 필드(변수)를 공유할수있게해준다. + 객체를 생성하지 않아도 메소드를 호출할 수 있도록 해준다. (메서드에서는 클래스 변수만 사용가능) 클래스에서 객체를 만들면 각 객체마다 변수가 생성된다. 각 변수는 독립적이다. -> 객체가 생성될때 함께 생성되며 객체가 소멸되면 함께 소멸된다. static 키워드로 지정하여 클래스의 모든 객체가 공유하는 변수다. (클래스 변수라고도 한다) -> 객체 생성전에도 접근이 가능하다. -> 객체를 여러개 생성한다고 해도 static변수는 하나뿐이다. => 인스턴스 변수는 객체 생성 후에만 호출이 가능 && static변수는 객체 생성 전에도 호출이 가능하다. 정적멤버 접근법 클래스 이름. 정적변수이름 클래스 이름. ..

자바 - this, this메서드(4)

this를 어떨때에 쓸까 1학년 수업 - 객체지향프로그래밍2에서 this를 배웠는데 왜써야하는지 이해를 못했던 기억이 있다. java를 공부하면서 완전히 이해했다. this this에는 가릴킬때 사용하는 this와 호출할때 사용하는 this메소드가 있다. 1) this -> 생성한 객체 자신을 가리킨다! class Circle{ private double radius; //멤버변수 public Circle(double radius) { this.radius = radius; } } 멤버변수(인스턴스 변수)인 radius와 생성자의 인수로 받는 radius가 이름이 동일한것을 확인할수있다. 이때 인수와 멤버변수를 구별할수있도록 도와주는 것이 this이다. this는 생성자로 생성한 객체 자신을 가리키는 "..

자바 - [객체지향프로그래밍]-생성자와 생성자 오버로딩(3)

[1] 객체지향 프로그래밍의 특징 1) 캡슐화 -데이터를 가진 필드와 메서드를 외부에서 알 수 없도록 감추는것 2) 상속 -상위객체에서 하위객체로 메서드와 필드를 상속할수있다. 상속받은 메서드와 필드는 하위객체에서 재사용 가능하다. 3) 다형성 -동일한 명령이라도 객체의 종류에 따라 다르게 실행되는 것 [2] 클래스의 선언 => 현실의 객체에서 불필요한 속성을 제거, 중요정보만을 표현하는 모델링 기법을 의미한다. public class ball { double radius; String color; void print() { System.out.println("공의 색은" + color + "반지름은 "+ radius); } } 위의 코드와 같이 공은 색과 반지름으로 추상화 할 수 있다. [3] 기초타입..