백엔드 과정/Java

    [Java] day15. 추상클래스/ 인터페이스

    추상클래스와 인터페이스 상속과 다형성에 이어진 개념에 대해 배웠다. 암기해야할 것들이 조금 있는 추상클래스와 인터페이스..... 조금 어려웠다. 각각 아직은 프로그래밍을 실제로 하고 있지 않아 이러한 개념을 왜 사용해야 하는지 크게 와닿지 않았다. 추후 이 개념을 사용하게 될 날을 위해 우선 개념적으로 숙지해야겠다. 추상클래스 추상클래스는 곧 미완성 클래스 이다. 내용이 작성되지 않은 클래스. 메소드를 정의했지만 정작 알멩이는 없는 클래스이다. 이런 미완성 클래스를 왜 사용하는 것일까? 추상클래스를 상속 받은 하위클래스를 이용해서, 이 하위클래스는 추상클래스를 완성시킨다.... why ?? 추상클래스는 필수 기능을 정의해서 오버라이딩을 꼭 해야한다고 강제성을 부여하는 것이다. 바로 다형성을 활용하는 개념..

    [Java] day14. 다형성

    전 수업과 깊게 연관된 내용으로 이전 포스팅을 첨부한다. JAVA 국비교육 day13. 상속 / 오버라이딩 상속 부모클래스가 가지는 멤버를 자식클래스가 물려받아 자신의 멤버인 것처럼 사용할 수 있도록 만든 기술 멤버 외에 타입 또한 상속이 된다 . 다형성의 토대 자바는 단일 상속(하나의 클래스 tm-im.tistory.com 이제 클래스와 객체 파트 이후로 과제가 클래스다이어그램을 읽어내고 그에 맞는 여러 클래스를 만들고. 객체 생성과 메소드 호출하는 법, 상속 관계에 맞춰 프로그래밍하는 걸 연습하다보니까 블로그에 연습문제의 어느 부분을 딱 올리기가 시간이 오래 걸려서 다른 방식의 포스팅이 필요할 것 같다. 차라리 문제 풀이 중 알게 되는 부분을 TIL로 간단히 올리는게 나을 것 같다. 다형성부터는 정말..

    Java 문제풀이. 홀수를 입력받아 오름/내림차순으로 출력하기 (배열)

    문제 /* 홀수인 양의 정수를 입력 받아 입력 받은 크기 만큼의 정수형 배열을 할당하고 * 배열의 중간까지는 1부터 1씩 증가하여 오름차순으로 값을 넣고, * 중간 이후부터 끝까지는 1씩 감소하여 내림차순으로 값 넣어 출력하세요 * * 단, 홀수인 양의 정수를 입력하지 않은 경우에는 "양수 혹은 홀수만 입력해야 합니다."를 출력하세요 * * -- 입력 예시 -- * 홀수인 양의 정수를 입력하세요 : 7 * * -- 출력 예시 -- * 1 2 3 4 3 2 1 * * -- 입력 예시 -- * 홀수인 양의 정수를 입력하세요 : 8 * * -- 출력 예시 -- * 양수 혹은 홀수만 입력해야 합니다. */ 작성한 코드 package com.greedy.section01.array.level03.hard; imp..

    [Java] day13. 상속 / 오버라이딩

    상속 부모클래스가 가지는 멤버를 자식클래스가 물려받아 자신의 멤버인 것처럼 사용할 수 있도록 만든 기술 멤버 외에 타입 또한 상속이 된다 . 다형성의 토대 자바는 단일 상속(하나의 클래스만을 부모클래스로 가짐)을 지원 클래스 간의 상속 시에는 extends 키워드를 사용 public class Academy extends Company{} 장점 새로운 클래스를 작성 시 기존에 작성 된 클래스의 재사용 가능 클래스간 계층 관계가 형성되어 다형성 문법의 토대가 됨 단점 부모클래스의 기능 변경 시 자식클래스의 정상적인 동작 유무 예측이 힘듦 자식클래스가 물려받아 사용하는 기능들을 부모클래스에서 변경 시 어려움이 따름 부모클래스로부터 물려받은 기능이 자식클래스에서는 무의미 할 수 있음 장단점을 고려해 볼 때 I..

    [Java] day12. 객체배열

    객체배열 레퍼런스 변수에 대한 배열 동일한 타입의 여러 인스턴스들을 배열로 관리할 수 있다. 생선한 인스턴스도 배열을 이용해서 관리하면 동일한 타입의 여러 개 인스턴스를 각각 취급하지 않고 연속 처리할 수 있어서 유용하다. 또한 반환값은 1개의 값만 반환할 수 있기 때문에 동일한 타입의 여러 인스턴스를 반환해야 하는 경우 객체 배열을 이용할 수 있다. 선언 클래스명[] 배열명; 클래스명 배열명[]; Product[] pArr; Product pArr[]; 할당 배열명 = new 클래스명[배열크기]; pArr = new Product[3]; 선언과 동시에 할당 클래스명 배열명[] = new 클래스명[배열크기]; Product pArr[] = new Product[3]; 인덱스를 이용한 초기화 배열명[i] ..

    [Java] day11. 오버로딩 / Static

    오버로딩 ( overloading ) 이란 동일한 메소드명 으로 다양한 종류의 매개변수에 따라 다르게 처리해야하는 것을 관리하기 위해 사용하는 기술 동일한 메소드명의 매개변수의 타입 , 개수 , 순서 를 다르게 작성 (메소드의 시그니처 가 다르지만 메소드 명은 같게 함) 생성자 작성 시 매개변수 부분의 타입, 갯수, 순서를 다르게 작성하면 서로 다른 생성자로 인식해서 동일한 이름이지만 여러 개 작성할 수 있었다. = > 오버로딩 ( Overloading ) 오버로딩의 사용이유 동일한 기능의 메소드를 매개변수에 따라 다르게 이름을 정의하면 복잡하고 관리하기가 어려워 진다. 따라서 동일한 이름으로 다양한 종류의 매개변수에 따라 처리해야 하는 여러 메소드를 동일한 이름으로 관리하기 위해 사용한다. 오버로딩의 ..

    Java 문제풀이. 랜덤한 로또번호 중복없이 오름차순 정렬하기

    문제 * 로또번호 생성기 * 6칸 짜리 정수 배열을 하나 생성하고 * 1부터 45까지의 중복되지 않는 난수를 발생시켜 각 인덱스에 대입한 뒤 * 오름차순 정렬하여 출력하세요 작성한 코드 int[] rotoNum = new int[6]; //배열 선언 및 할당 for (int i = 0; i

    [Java] day10. 클래스와 객체 / 캡슐화 / 생성자

    다들 객체까지는 예습하라고 했는데, 안했기 때문에 두렵다.. 객체지향언어 OOP 제발 이해할 수 있길. 클래스 클래스는 서로 다른 자료형의 데이터들 을 사용자 개발자 ) 정의로 하나로 묶어 새로운 타입을 정의 배열과 달리 다른 자료형들의 값을 하나로 묶을 수 있음 다른 곳에서 클래스의 필드에 접근하기 위해 '.' (참조연산자)를 활용. 클래스 내부에는 메소드를 작성하지 않고 바로 변수를 선언할 수 도 있다. 이것을 전역변수( 필드 == 인스턴스 변수 == 속성)라고 부른다. 필드에 접근하기 위해서는 레퍼런스명.필드명 으로 접근한다. ' . '은 참조연산자 라고 하는데, 레퍼런스 변수가 참조하고 있는 주소로 접근한다는 의미를 가진다. 각 공간을 필드명으로 접근한다. (배열은 인덱스로 접근, 객체는 필드명으..

    [Java] day9. 배열을 복사하는 방법 얕은복사/깊은 복사

    배열의 복사 배열의 복사에는 크게 두가지 종류가 있다. 1. 얕은 복사 (shallow copy) : 스택의 주소값만 복사 얕은 복사는 스택에 저장되어 있는 배열의 주소값만 복사한다는 것이다. 따라서 두개의 래퍼런스 변수는 동일한 배열의 주소값을 가지고 있다. 하나의 래퍼런스 변수에 저장된 주소값을 가지고 배열의 내용을 수정(값 변경)을 하게되면 다른 레퍼런스 변수로 배열을 접근했을 때도 동일한 배열을 가리키고 있기 때문에 변경된 값이 반영되어 있다. /*얕은 복사를 확인할 원본 배열 생성*/ int[] originArr = {1,2,3,4,5}; /*카피할 배열*/ int[] copyArr = originArr; /* hashcode를 출력해보면 두 개의 래퍼런스 변수는 동일한 주소를 가지고 있는 것을..