본문 바로가기

Programming/자바

(59)
자바 재정리 - 참조 참조 : 값이 직접 할당되지 않고 값이 있는 주소를 가리키는 것 ex. 배열 타입, 열거 타입, 클래스(ex. String), 인터페이스 => 참조 객체 자체는 힙 영역, 객체의 주소값은 스택 영역에 생성됨 ※ 데이터 타입 ※ 메모리 구조 1. 메소드 영역 (=클래스/정적 영역) 전역변수, 정적 멤버변수 저장 메인 메소드의 클래스, 정적변수(=> 바이트 코드)가 로드됨 -> JVM이 메인메소드 호출 가능해짐 2. 스택 영역 => 공유되는 다른 영역과 달리 스레드별로 각각 생성됨 지역변수, 매개변수 저장 기본형 변수(공간에 직접 할당되는 값들 ex.int), 참조값의 주소 저장 메소드 호출 될때마다 지역변수 저장, 호출 끝나면 저장됐던 변수들 제거됨 3. 힙 영역 참조값 저장 인스턴스 변수(new로 생성)..
생활코딩 자바 - Collections framework Arraylist의 사용법 배열 => 정해진 배열 크기 변경 불가 String[] arrayObj = new String[2]; //문자열 두 개만 허용 arrayObj[0] = "one"; arrayObj[1] = "two"; arrayObj[2] = "three"; 해결 : Collections framework 기능 Arraylist 사용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public static void main(String[] args) { String[] arrayObj = new String[2]; //문자열 두 개만 허용 arrayObj[0] = "one"; arrayObj[1] = "two"; //arrayObj[2] = "thre..
생활코딩 자바 - 제네릭 제네릭의 사용 제네릭 : 클래스 내부에서 사용할 데이터타입을 외부에서 지정 메소드의 매개변수와 유사하게 작동 내부 class Person{ public T info; } 외부 public class GenericDemo { public static void main(String[] args) { Person p1 = new Person(); //info=> String Person p2 = new Person(); //info=> StringBuilder }} => 클래스를 정의 할 때 info의 데이터 타입을 확정하지 않고, 인스턴스를 생성할 때 데이터 타입을 지정 제네릭 사용 이유 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2..
생활코딩 자바 - 참조 ? 복제란 new 통해 데이터타입 생성 => 참조형 데이터타입 public class ReferenceDemo1 { public static void runValue() { int a=1; //1을 변수 a에 담음 int b =a; //a의 값 1을 변수 b에 담음 b=2; System.out.println("runValue, "+a); }} // runValue, 1 참조란 class A{ public int id; A(int id){ this.id = id; } } public class ReferenceDemo1 { public static void runValue() { int a = 1; int b = a; b= 2; // 1을 int a에 담음 -> 1을 복제해(결국 각각 다른 1의 값) b에 담..
생활코딩 자바 - 상수2 - enum 복습 상수 : 변하지 않는 값 int x = 1; 1 = 2; 주석 필요한 코드 public class ConstantDemo { public static void main(String[] args) { /* * 1. 사과 * 2. 복숭아 * 3. 바나나 */ int type = 1; //이 코드는 왜 필요한 건지 이해가 잘 안된다... 점점 놓치는게 많아지는듯 ㅠ 얼른 2회독 하고 싶다 switch(type){ case 1: System.out.println(57); break; case 2: System.out.println(34); break; case 3: System.out.println(93); break; } 주석 불필요 (final 사용) public class ConstantDemo { ..
생활코딩 자바 - Object 클래스 소개 상속 class O {} => class O extends class Object{} 와 의미 동일 => 자바에서 모든 클래스는 암시적으로 class Object 상속 => 오브젝트 클래스는 모든 클래스가 기본적으로 포함해야할 기능 제공 https://docs.oracle.com/javase/7/docs/api/index.html 참고 toString Object class 의 대표적 메소드 : 객체를 문자화 CalculatorDemo public class CalculatorDemo { public static void main(String[] args) { Calculator c1 = new Calculator(); c1.setOprands(10, 0); c1.divide(); System.ou..
생활코딩 자바 - 예외 낙법 / 덜 실패하는 법 예외란 오류 처리 위한 방법 class Calculator{ int left, right; public void setOprands(int left, int right){ this.left = left; this.right = right; } public void divide(){ System.out.print("계산결과는 "); System.out.print(this.left/this.right); System.out.print(" 입니다."); } } public class CalculatorDemo { public static void main(String[] args) { Calculator c1 = new Calculator(); c1.setOprands(10, 0); ..
생활코딩 자바 - 다형성 : 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것 ex. 키보드 키 : 누르는 조작방법은 일치하지만 esc, enter 의 동작방법은 다름 메소드와 다형성 오버로딩 예시 class O{ public void a(int param) { System.out.println("숫자출력"); System.out.println(param); } public void a(String param) { System.out.println("문자출력"); System.out.println(param); } } public class PolymorphismOverloading { public static void main(String[] args) { O o = new O(); o.a(1); o.a("one"); } ..
생활코딩 자바 - 인터페이스 문법, 개념 abstract, final과 함께 대표적인 규제 객체가 특정 인터페이스 사용하는 경우 반드시 인터페이스의 메소드들 구현해야 함 (인터페이스가 강제하는 메소드 구현하지 않으면 컴파일도 안됨) interface I { public void z(); } class A implements I { public void z() {} => 인터페이스 구현함 } 실질적 쓰임 인터페이스 필요한 사례 개발자 B : 더미클래스 생성 (A가 Calculator 클래스 작업 중, B가 해당 클래스 사용하는 로직 만듦) class CalculatorDummy{ => 가짜/모조/더미 클래스 public void setOprands(int first, int second, int third){} public int s..
생활코딩 자바 - final : 상속/변경을 금지하는 규제 final 필드 final로 지정된 변수는 값 변경 불가 class Calculator { static final double PI = 3.14; =>고정값, 변하지 않는 상수 지정 int left, right; public void setoprands (int left, int right) { this.left = left; this.right = right;} //Calculator.PI = 6; =>이미 지정된 값이므로 변경 불가 public void sum() { System.out.println(this.left +this.right); } public void avg() { System.out.println((this.left+this.right)/2); } } ..