본문 바로가기

컴퓨터 프로그래밍/Java19

[Java] Collection 과 Wrapper 객체 java 의 interface 란?실제 구현은 인터페이스 내부에 없음가장 추상화된 개념의 명세추상적인 타입의 역할을 함실제로 인터페이스를 구현하는 구현체들의 행동 양식을 정해줌다중 상속을 구현할 수 있게 함결론적으로 추상적인 타입의 역할을 하면서 해당 타입의 구현체들의 행동 양식이나 특성을 지정해주는 역할을 함 List, 배열 List 는 추상적 자료구조, 순서를 가지고 일렬로 나열한 원소들의 모임 ( 순서가 있고 중복 허용 부분에서 집합(Set) 과 구별 )순서를 가지고 저장되어 있어서 검색 접근이 쉽지만 추가, 삭제가 매우 느림하지만 가장 끝과 가장 처음에 추가되는 Stack, Queue 는 순서를 유지하기 때문에 빠름 Wrapper 객체char, int, long과 같은 것들은 실제로 “값” 이상의.. 2024. 8. 5.
[Java] Generic 제네릭의 효용타입 언어에서 중복되거나 필요없는 코드를 줄여주고, 그러면서 타입 안정성을 해치지 않는다. 파이썬, 자바스크립트와는 다르게 Java 는 타입을 지정해줘야한다. 같은 함수더라도 타입에 따라 세 차례나 구현해야함. 제네릭 문법1. 제너릭은 클래스 또는 메서드에 사용 가능, 클래스 이름 뒤에 문법 안에 들어가야할 타입 변수 지정 ( T 는 컨벤션 )2. 선언해둔 타입 변수는 해당 클래스 내에서 특정한 타입이 들어갈 자리에 대신 들어갈 수 있음3. 메서드의 리턴 타입에 들어가는 것 역시 마찬가지다. 4. 제너릭을 통해 구현한 클래스를 사용하는 부분.클래스에 선언했기 때문에 인스턴스를 만들기 위해서 타입 변수에 들어갈 실제 변수의 값을 넣어줘야함. ( String 으로 넣어준 모습 ) 5. 타입변수.. 2024. 8. 4.
[Java] 예외처리 오류와 예외의 차이오류는 일반적으로 회복이 불가능한 문제시스템 레벨에서, 주로 환경적인 이유로 발생예외는 일반적으로 회복이 가능한 문제그 예외가 발생할 수 있다는 것을 인지하고, 대응했을 것. 아니라면 해야한다. 이를 대응하는 것이 예외처리 예외의 종류코드 실행 관점에서 예외의 종류컴파일 에러 (예외)대부분 자바 프로그래밍 언어의 규칙을 지키지 않아서 발생그냥 다시 문법에 맞게 작성하면 됨런타임 에러 (예외)주로 다루게 될 에러 (예외)문법적인 오류는 아니라서 컴파일은 잘 되었지만, 프로그램이 실행 도중 마딱드리게 되는 예외 예외처리 관점에서 예외의 종류확인된 예외 ( Checked Exception )컴파일 시점에 확인하는 예외반드시 예외 처리를 해줘야함미확인된 예외 ( Unchecked Excepti.. 2024. 7. 30.
[Java] 인터페이스 인터페이스상속 관계가 없는 다른 클래스들이 서로 동일한 행위 즉, 메서드를 구현해야할 때 인터페이스는 구현 클래스들의 동일한 사용 방법과 행위를 보장 선언public interface 인터페이스명 {} 구성모든 멤버 변수는 public static final ( 생략 가능 )모든 메서드는 public abstract ( 생략 가능 ( static, default 메서드 예외 ) )생략되는 제어자는 컴파일러가 자동으로 추가public interface 인터페이스명 { public static final char A = 'A'; static char B = 'B'; final char C = 'C'; char D = 'D'; void turnOn(); // public abstra.. 2024. 7. 30.
[Java] 상속 상속상속을 사용하면 코드의 중복이 제거되고 재사용성이 크게 증가하여 생산성과 유지 보수성에 매우 유리해짐public class 자식클래스 extends 부모클래스 {}※ 주의상속은 확장의 개념. 부모 클래스의 멤버의 개수는 자식 클래스의 멤버의 수보다 클 수가 없다.클래스 간의 관계상속관계 : is -a ( 스포츠카는 자동차다 )포함관계 : has -a ( 자동차가 4개의 타이어, 4개의 문을 가지고 있음 ) Main.java// 자동차 객체 생성Car car = new Car("GV80", "Black", 50000000);// 자동차 부품 : 타이어, 차문, 핸들 선언Tire[] tires = new Tire[]{ new Tire("KIA", 150000), new Tire("금호", 1.. 2024. 7. 29.
[Java] this와 this(), 접근 제어자, package와 import thisthis 는 객체, 인스턴스 자기 자신을 표현하는 키워드객체 내부 생성자 및 메서드에서 객체 내부 멤버에 접근하기 위해 사용public Car(String model, String color, double price) { model = model; color = color; price = price; } 이렇게 생성자를 선언하는데 매배변수명과 객체의 필드명이 동일한 경우 오류는 발생 안하지만 해당 변수들은 객체의 필드가 아닌 가장 가까운 매개변수명을 가리킴. → 자기 자신에게 값을 대입하는 상황이 일어남 public Car(String model, String color, double price) { thi.. 2024. 7. 29.
[Java] 생성자 생성자생성자는 객체가 생성될 때 호출되며 객체를 초기화 하는 역할을 수행생성자 선언// // 생성자 : 처음 객체가 생성될 때 ( instance 화 ) 어떤 로직을 수행해야 하며, 어떤 값이 필수로 들어와야 하는지 정의public Car() { // logic // 기본 생성자 : 생략이 가능} 생성자 호출Car car = new Car(); 생성자는 반환 타입이 없고 이름은 클래스의 이름과 동일new 연산자에 의해 객체가 생성되면서 Car(); 즉, 생성자가 호출됨기본생성자 기본 생성자는 선언할 때 괄호() 안에 아무것도 넣지 않는 생성자를 의미모든 클래스는 반드시 생성자가 하나 이상 존재만약 선언하지 않았으면 기본 생성자를 자동으로 추가해주고 접근제어자 (public) 을 따름필드 초.. 2024. 7. 28.
[Java] 인스턴스 멤버와 클래스 멤버 멤버 = 필드 + 메서드선언하는 방법에 따라서 인스턴스 멤버와 클래스 멤버로 구분인스턴스 멤버는 객체 생성 후에 사용 가능클래스 멤버는 객체 생성 없이도 사용 가능인스턴스 멤버객체의 인스턴스 필드는 각각의 인스턴스마다 고유하게 값을 가질 수 있음하지만 그렇다고 각 인스턴스 마다 메서드들이 매 번 생성된다면 중복 저장으로 메모리 효율이 떨어짐 → 메서드는 메서드 영역에 두고서 모든 인스턴스들이 공유해서 사용→ 대신 무조건 객체 생성, 즉 인스턴스를 통해서만 메서드가 사용될 수 있도록 제한 클래스 멤버Java 클래스 로더에 의해 메서드 영역에 저장되고 사용메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버를 의미 → 객체의 생성 필요 없이 바로 사용 가능 필드와 메서드를 클래스 멤버로 만들기 .. 2024. 7. 26.
[Java] 필드와 매서드 객체의 속성 : 필드필드는 객체의 데이터를 저장하는 역할을 함 고유 데이터 : 자동차 고유한 정보상태 데이터 : 자동차 상태 정보 ( 자주 바뀜 )객체 데이터 : 자동차 구성 요소 ( 하나의 또 다른 객체 )public class Tire { public Tire() {}} 타이어 클래스를 만들고, String company; // 자동차 회사String model; // 자동차 모델String color; // 자동차 색상double price; // 자동차 가격double speed; // 자동차 속도 , km/hchar gear; // 기어의 상태, P,R,N,Dboolean lights; // 자동차 조명의 상태Tire tire; 이와 같이 필드 생성할 때 객체 데이터를 선언. 필드의 초기.. 2024. 7. 26.
[Java] 클래스 (설계도) 설계하고 객체 생성 (인스턴스화) 객체는 속성(필드) 과 행위(메서드) 로 구성 ex ) 자동차속성 : 회사, 모델, 색상, 가격, 속도 등행위 : 가속, 브레이크, 기어 변속, 조명, 경적 등현실 세계에 있는 객체를 소프트웨어의 객체로 설계하는 것을 ‘객체 모델링’ 객체 간의 관계 사람 객체는 자동차 객체를 사용  타이어 객체, 차 문 객체, 핸들 객체는 자동차 객체에 포함 자동차와 기차 객체는 하나의 공통된 기계 시스템 객체를 토대로 만들어진다고 가정하면 자동차 객체와 기차 객체는 기계 시스템 객체를 상속받는 상속관계가 됨 객체지향 프로그래밍의 특징캡슐화캡슐화란 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것을 의미.외부 객체에서는 캡슐화된 객체의 내부 구조를 알 수 .. 2024. 7. 26.
[Java] Level 1 과제 중 추가로 알게된 점 정리하기 1. 문자 입력시 맨 앞 첫 문자만 변수에 저장하기System.out.println("사칙연산 기호를 입력하세요: "); // +, -, *, /char operation = sc.next().charAt(0); 사칙연산을 입력할 때 문자 하나만 저장하면 되기 때문에 char 타입의 변수를 선언했다.하지만 next() 는 String 을 저장하는 메서드 이기 때문에 뒤에 charAt() 을 이용해서 0번째 문자를 operation 으로 저장하도록 설정되었다.2. ' ' (작은 따옴표) 를 이용해 char 타입 비교연산자로 비교하기if (oper == '+') { result = num1 + num2;} + 기호를 처음에 " " 로 감싸서 String 취급을 받아 에러가 발생했었다. char 타입은 .. 2024. 7. 25.
[Java] 컬렉션 ( ArrayList, LinkedList, Stack, Queue, Set, Map ) 컬렉션컬렉션은 배열보다 다수의 참조형 데이터를 더 쉽고 효과적으로 처리할 수 있는 기능을 가지고 있음기능 : 크기 자동 조정/ 추가/ 수정/ 삭제/ 반복/ 순회/ 필터/ 포함 확인 등종류List : 순서가 있는 데이터의 집합 ( 데이터 중복 허용 ) ( 배열과 비슷 )Queue : 빨대처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합먼저 들어간 순서대로 조회 가능Set : 순서가 없는 데이터의 집합 ( 데이터 중복 허용 안 함 ) ( 집합과 비슷 )Map : 순서가 없는 ( Key, Value ) 쌍으로 이루어진 데이터 집합 ( Key 는 중복 안 함 )ListArrayListArray : 실제 값 저장 (기본형 변수로 저장 ) , 정적 배열ArrayList : 참조형 변수들을 저장, 동.. 2024. 7. 24.
[Java] 배열 1. 배열 선언타입[] 변수; ex) int[] intArr;타입 변수[]; ex) int intArr[];2. 배열 생성 배열(Array)는 참조형 변수들처럼 new 명령을 통해서 생성하며, 대괄호[ ] 안에 크기를 지정해준다. 배열은 생성될 때 각 타입별 초기값으로 초기화되어 채워진다.//배열 생성후 초기화하면 배열의 주소가 할당된다. int[] intArray = new int[3]; // 초기값 {0,0,0} boolean[] boolArray = new boolean[3]; // 초기값 {false, false, false} String[] stringArray = new String[3]; // 초기값 {"","",""}int 는 0boolean 은 fal.. 2024. 7. 24.
[Java] 조건문, 반복문 ( 새로 알게된 내용 정리 ) Objects.equals() 메서드if (Objects.equals(aHand, "가위")) { } Objects.equals() 메서드는 위와 같이 사용하는데 위 코드를 예로 들면 aHand 와 "가위" 가 같으면 true 로 받아들여 if 문을 실행시킨다.Switch 문// switch/case 문 int month = 1;String monthString = "";switch (month) { case 1: monthString = "1월"; break; case 2: monthString = "2월"; break; case 3: monthString = "3월"; break; default: monthString = "알수 없.. 2024. 7. 23.
[Java] 연산자 ( 새로 알게된 내용 정리 ) 논리연산자System.out.println((5 > 3) || (1 > 3)); 괄호 안에 있는 두 연산자를 논리연산자를 이용해 비교할 수 있다. boolean flag = true;System.out.println(!flag); 선언된 불리언 변수 앞에 ! ( NOT ) 을 붙여서 결과를 바꿀 수 있다. System.out.println(!(5 == 5)); 괄호 안에 있는 연산 앞에 ! ( NOT ) 을 붙여서 결과를 바꿀 수 있다. 대입연산자아래 두 식의 차이점은 val 선언 시에 b 앞에 -- 가 붙나 뒤에 -- 가 붙나 이다.int a = 10;int b = 10;int val = ++a + b--; // 21 위는 val 선언 시에  a 가 11, b 가 10 으로 결과가 21 이 된다. 21.. 2024. 7. 23.