Java 24

Java(8) 추상클래스와 인터페이스

1. 추상 클래스(1) 추상클래스란?: 추상 메소드를 0개 이상 포함하는 클래스 (추상 메소드가 없어도 추상 클래스로 만들 수 있다.)- 추상 메소드: 메소드의 기능이 없고 헤더부만 존재하는 불완전한 메소드- 추상 메소드가 있으면 반드시 추상 클래스로 만들어야 한다.- 스스로 자신의 생성자를 활용한 인스턴스 생성 불가(불완전한 클래스) -> 추상클래스는 상속을 활용해 하위 클래스 타입의 인스턴스를 이용해서 인스턴스 생성해야 한다.// 추상 클래스 선언public abstract class Product { // 추상 클래스는 필드를 가질 수 있다. private int nonStaticField; private static int staticField; // 추상 클래스는 생성자를 ..

Java 2024.08.08

Java(7) 다형성

1. 다형성(Polymorphism)이란?: 하나의 인스턴스가 여러가지 타입을 가질 수 있는것을 의미한다.- 하나의 타입으로 여러 타입의 인스턴스를 처리할 수 있고, 하나의 메소드 호출로 객체 별로 각기 다른 방법으로 동작하게 할 수도 있다. * cf. 객체지향 프로그래밍의 3대 특징: 1) 캡슐화 2) 상속 3) 다형성  2. 다형성의 장점1) 여러 타입의 객체를 하나의 타입으로 관리 가능 -> 유지보수성 & 생산성 증가Car[] carr = new Car[5];carr[0] = new Sonata();carr[1] = new Morning();carr[2] = new Avante();carr[3] = new Grandure();carr[4] = new Porter();for(Car car : carr..

Java 2024.08.08

Java(6) 상속

1. 상속이란?: 부모 클래스가 가지는 멤버(필드, 메소드)를 자식 클래스가 물려받아 자신의 멤버인 것처럼 사용할 수 있도록 만든 기술- 생성자는 물려받지 않는다.- 부모 클래스의 private 멤버는 상속되지 않는다.  (하지만 부모 클래스가 private 멤버에 대한 접근을 제공하는 protected 또는 public 메서드를 정의하면,   자식클래스는 이를 통해 간접적으로 private 멤버에 접근 가능)- 멤버 외에도 부모 클래스의 타입도 상속된다. (다형성의 토대)- 상속 구조로 인해 불필요한 기능이 추가될 수도 있다.- 자바는 단일상속(자식 클래스는 하나의 부모 클래스만 갖는다.)만 지원한다. 2. 상속의 키워드(1) IS-A- IS-A 관계가 성립하는 경우 상속 사용 가능  ex) FireC..

Java 2024.08.07

Java(5) final

1. final(1) final 키워드를 사용할 수 있는 위치- 지역변수: 초기화 이후 값 변경 불가- 매개변수: 호출 시 전달한 값 변경 불가- 인스턴스 변수: 인스턴스 생성 후 초기화 이후에 값 변경 불가- 클래스 변수(static): 프로그램 시작 이후 값 변경 불가- non-static 메소드: 메소드 재작성(오버라이딩) 불가- static 메소드: 메소드 재작성(오버라이딩) 불가- class: 상속 불가 (2) non-static field에 final 사용- 초기 인스턴스 생성 시 기본 값 0이 필드에 들어가게 되는데  초기화 이후 값 변경이 불가하므로 선언과 동시에 초기화 필요 (3) static field에 final 사용- 생성자를 이용한 초기화 불가- 초기화 블럭을 통해 초기화 가능 (..

Java 2024.08.07

Java(4) 클래스와 객체

1. 클래스: 사용자 정의 자료형으로, 서로 다른 타입의 데이터와 메소드를 정의하여 만든 사용자 정의 타입이다.- 클래스를 사용하려면 new 연산자로 heap 영역에 할당해야 한다. (heap 영역은 기본적으로 JVM 초기값으로 초기화된다.)public class Member { String id; String pwd; String name; int age; char gender; String[] hobby; // 배열 필드도 있을 수 있다.}public class Application { public static void main(String[] args) { Member member = new Member(); // "레퍼런스변수명.필드명..

Java 2024.08.07

Java(3) API(Application Programming Interface)

1.API란?: 응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있도록 만든 인터페이스. 즉, 우리가 구현하기 번거로운 기능들을 JDK를 설치하면 사용할 수 있도록 제공한 소스코드(클래스나 인터페이스)들을 의미한다. 2. Math 클래스public static void main(String[] args) { // java.lang 패키지의 Math 클래스 // 절댓값 출력 System.out.println(Math.abs(-7)); // 최솟값 출력 System.out.println(Math.min(10, 20)); // 최댓값 출력 System.out.println(Math.max(10, 20)); ..

Java 2024.08.06

Java(2) 문자열 비교하기

1. 문자열 비교하기(1) ==, !=- 문자열의 일치 여부가 아닌, 문자열 객체가 위치하는 주소값을 비교한다.- cf. 문자열은 ==, != 비교는 가능하지만 대소 비교는 불가능하다.(2) 문자열1.equals(문자열2)- 문자열1과 문자열2의 값을 비교  2. Java에서 String을 생성하는 2가지 방법1. 리터럴을 이용하는 방법- 리터럴을 이용해 같은 문자열을 할당해주면 두 String 변수는 동일한 메모리 위치를 참조한다.// str1과 str2은 동일한 메모리 위치 참조String str1 = "java";String str2 = "java"; 2. new 연산자를 이용하는 방법String str = new String("java");// str은 str1, str2와 다른 메모리 주소를 참..

Java 2024.08.05

Java(1) 리터럴, 변수, 오버플로우, 언더플로우, 형변환

* Java 수업을 들으면서 헷갈리거나 신경 쓰지 못했던 부분, 간과하기 쉬운 부분 등을 정리하는 글이기에 생략된 내용이 있습니다. 1. 리터럴(1) 리터럴이란?: 변하지 않는 데이터 그 자체 * 상수 vs 리터럴- 상수: 데이터가 저장되는 메모리 상의 공간- 리터럴: 고정된 값 자체int age = 20; // 20은 리터럴final int MAX_AGE = 100; // 100은 리터럴 (MAX_AGE는 상수)String str = "java" // "text"는 리터럴 (2) 리터럴의 접두사와 접미사- long 타입은 L을 접미사로 사용 ex) 12L- 8진수는 접두사 0 사용 ex) 0b0011- 16진수는 접두사 0x 또는 0X 사용- float..

Java 2024.08.05

[Java] 배열

1. 배열- 동일한 자료형, 순차적 자료 구조- 선언 시 배열 길이 결정된다.- heap 영역에 new 연산자를 통해 할당된다.- 인덱스 연산자[]로 빠른 참조가능 (cf. Linked list는 빠르지 않다. 시간 복잡도 O(n))- 물리적 위치와 논리적 위치가 동일 (실제 메모리에서 A[0]와 A[1]은 연속적이다. Linked list는 물리적 위치 != 논리적 위치)- 자바에선 객체 배열을 구현한 ArrayList를 자주 사용한다. (Java util 패키지에서 제공)  2. 배열 선언 및 초기화(1) 배열 선언하기: 스택에 배열의 주소를 보관할 레퍼런스 변수 공간을 만드는 것- 선언한 레퍼런스 변수에 배열을 할당하여 대입할 수 있다.  (발생한 주소가 레퍼런스 변수에 저장되고, 이것을 참조해서 ..

Java 2024.07.11

static 변수

1. 여러 인스턴스에서 공통으로 사용하는 변수 (static 변수)- 인스턴스가 생성될 때 만들어지는 변수가 아니라, 처음 프로그램이 메모리에 로딩될 때 메모리 할당- = 클래스 변수, 정적 변수- 인스턴스 생성과 상관없이 사용할 수 있으므로 클래스 이름으로 직접 참조(ex. Employee.serialNum) 2. static 변수 선언과 사용하기static int num;studentLee.num = 10000; Employee.javapublic class Employee { private static int serialNum = 1000; private int employeeId; private String employeeName; private String department; public ..

Java 2024.07.07