ALL 46

[Java] 상속과 Object 클래스

상속 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다. 상속을 이용하면 기존 클래스의 모든 필드와 메소드를 물려받아, 새로운 클래스를 생성할 수 있다. 기존 클래스를 부모 클래스(parent class)라고 하며, 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class)라고 한다. class 자식클래스이름 extend 부모님클래스 이름 {...} 위 사진을 보면 부모클래스는 자식클래스에 포함돼있다. 자식클래스에는 부모클래스의 필드와 메소드만이 상속되며, 생성자와 초기화 블록은 상속되지 않는다. 아래 코드를 통해 필드, 메소드 상속과 생성자에 대하여 알아보자. class Parent { private int a = 100; public int b = 20..

Java 2022.09.09

[Java] 접근 제어자

아래와 같은 접근제어자를 사용하여 변수나 메서드의 사용 권한을 설정할 수 있다. public protected default private 위 순서대로 접근이 점점 제한된다. private private이 붙은 변수, 메소드는 해당 클레스에서만 접근이 가능하다. public class Main { public static void main(String[] args) { Access ac = new Access(); System.out.println(ac.a); // 100 System.out.println(ac.b); // 에러 발생, java: b has private access in Access ac.getB(); // 200 } } class Access { int a = 100; private ..

Java 2022.09.08

[Java] JVM 구조

Class Loader 클래스 파일을 불러와서 메모리영역(Runtime Data Area)에 저장하는 역할을 한다. Execution Engine Class Loader에 의해 메모리에 적재된 바이트코드를 명령어 단위로 실행하는 역할을 한다. Garbage Collector 사용하지 않거나 필요없는 객체들을 메모리에서 소멸시키는 역할을 한다. Runtime Data Area Method Area 모든 스레드가 공유하는 메모리 영역 클래스, 인터페이스, 메소드, 필드, Static변수 등을 보관한다. Heap Area 모든 스레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역이다. 메소드영역에 로드된 클래스만 생성이 가능하다. Garbage Collector가 참조되지 않는 메모리를 확인..

Java 2022.09.08

[Java] 클래스 메서드와 인스턴스 메서드

static 키워드의 여부에 따라 다음과 같이 구분된다. 클래스 메서드(static method) 인스턴스 메서드(instance method) 클래스 메서드(static method) 클래스 변수와 마찬가지로 인스턴스를 생성하지 않고도 바로 사용할 수 있다. 매서드 내부에서 인스턴스 변수를 사용할 수 없다. 클래스명.메서드명(); 으로 호출 인스턴스 메서드(instance method) 반드시 객체를 생성 후 참조변수.메서드명(); 으로 호출 // 회원가입에서 각각의 이메일과 가입자수(공통적인 부분)를 같이 관리해보자 class SignUp { // 클래스 변수(가입자 수) static int count = 0; // 인스턴스 변수 String email; String password; // 생성자 S..

Java 2022.09.07

[Java] this와 this()

this 인스턴스 자신을 가르키는 참조변수이다. 주로 멤버변수와 매개변수의 이름이 동일할 때, 이를 구분하기 위해 사용한다. static 메서드에서는 사용할 수 없다. // 클래스를 통해 회원정보를 저장해보자. class User { String name; String email; String phone; int age; User(String name, String email, String phone, int age) { // this 참조변수 this.name = name; this.email = email; this.phone = phone; this.age = age; } public void userInfo() { System.out.println("name : " + name); System.o..

Java 2022.09.06

[Java] 클래스 필드의 구분

클래스의 필드(field)란 클래스에 포함된 변수(variable)를 의미한다. 클래스 내에서 필드는 선언된 위치에 따라 구분된다. 1. 클래스 변수(static variable) 클래스 영역에 위치한 변수 중에서 static 키워드를 가지는 변수 2. 인스턴스 변수(instance variable) 클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수 3. 지역 변수(local variable) 메소드나 생성자, 초기화 블록 내에 위치한 변수 class Car { static int modelOutput; // 클래스 변수 String modelName; // 인스턴스 변수 void method() { int something = 10; // 지역 변수 } }클래스 변수와 인스턴스 변수..

Java 2022.09.06

[Java] 클래스 class

클래스에 대해 들어가기 전에 객체지향에 대한 이해를 먼저 해야한다! 객체 지향 프로그래밍(OOP, Object-Oriented Programming) 모든 데이터를 객체로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 된다. 이러한 객체의 상태와 행동을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그램이다. 이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 한다. 클래스(class) 클래스를 가지고 여러 객체를 생성하여 사용하게 된다. 객체의 상태를 나타내는 변수(또는 필드)와 객체의 기능을 나타내는 메소드로 구성된다. 인스턴스(instance) 클래스에서 객체를 생성하는 것을 인스턴스화라고 한다. 그리고 그 클래스에서 생성된 객체는 인스턴스라고 부른다. 즉, 메모리에 ..

Java 2022.09.06

[Java] 다차원 배열과 가변 배열

다차원 배열 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미합니다. 자료형[][] 변수 = new 자료형[열의길이][행의길이] public class Main { public static void main(String[] args) { int[][] arr = new int[2][3]; System.out.println(arr.length); // 2 -> 배열 속의 배열자체를 하나의 요소로 가지고 있기 때문에 길이는 2이다. // 초기화: 1부터 6까지 값을 넣어보자. int k = 1; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { arr[i][j] = k; k++; } ..

Java 2022.09.05

[Java] 배열 Array, 복사 방법

동일한 자료형의 데이터를 연속된 공간에 저장하기 위한 자료구조이다. 인덱스와 요소로 이루어져있으며 인덱스번호로 데이터에 접근이 가능하다.(index는 0부터 시작) 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리할 수 있다. // 배열 생성 자료형[] 변수 = new 자료형[배열길이]; // 배열 선언과 동시에 초기화 자료형[] 변수 = {데이터1, 데이터2, 데이터3, ...}; 자료형[] 변수 = new 자료형[]{데이터1, 데이터2, 데이터3, ...}; 배열 생성 public class Main { public static void main(String[] args) { int[] intArr = new int[4]; System.out.println(intArr.length); // 4 ->..

Java 2022.09.04

[Java] 조건문 if, switch

조건에 따라 코드의 실행 흐름을 다르게 동작하도록 제어하는 것 if - elif - else if (조건식1) { 실행문; // 조건식이 true일 때 실행 } else if (조건식2) { 실행문; // 조건식1이 false이고 조건식2가 true일 때 실행 } else { 실행문; // 조건식1과 2가 false일 때 실행 } // elif, else는 생략 가능 public class Main { public static void main(String[] args) { int myAge = 26; if (myAge >= 40) { System.out.println("40대 이상입니다."); } else if (myAge >= 30) { System.out.println("30대 이상입니다."); }..

Java 2022.09.03