Programming/Java

공부한 내용을 정리합니다
Programming/Java

Java / 'new'를 하지 않았을 때

public class C { private int a; public void set(int a) {this.a=a;} public void add(int d) {a+=d;} public void print() {System.out.println(a);} public static void main(String args[]) { C p = new C(); C q; // q가 있긴 하지만 a변수가 메모리상에 생성되지 않았다. (new를 하지 않았으므로) p.set(10); q=p; // q는 p의 주소를 참조하게 된다. p.add(10); q.set(30); p.print(); } } new 생성자를 하지 않으면 클래스 안에 있는 요소들이 메모리상에 생성되지 않는다.

Programming/Java

Java / String 관련 메서드

substring() A.substring(4)라면 string A의 인덱스 4번부터 저장한다는 뜻. A.substring(1,3)라면 인덱스 1번부터 인덱스 3번 직전 2번까지 (파이썬이랑 흡사한데 아무래도 파이썬이 이것과 비슷한 것이겠지) indexOf() indexOf("S") 라면 indexOf 안에 들어있는 문자열 S를 찾아서 → 그 인덱스를 스트링으로 출력한다

Programming/Java

Java / 상속 : 이름이 같은 변수, 메서드

A를 B가 상속받았을 때 A와 B가 같은 이름의 변수를 가지고 있는 경우 A→B 상속관계에, A의 int a =10 , B의 int a =20 인 경우 A obj1 = new B(); B obj2 = new B(); 이렇게 인스턴스를 생성해주었을 때, obj1, obj2은 a와 부모에게 상속받은 a를 둘 다 갖고 있다. 이 경우 obj1.a, obj2.a를 각각 출력하면 10, 20이 출력된다. 이유는 obj1은 A클래스로 만들어진 것이고, obj2는 B클래스로 만들어졌기에 해당 클래스에 해당되는 변수를 호출하게 되는 것이다. 이 경우 obj1에서 주의할 것 1. 메서드 super의 메서드만 사용 가능하다. sub만 갖고있는 메서드는 사용 불가하다. 이 경우에도 오버라이딩 된 메서드는 오버라이딩이 적용된..

Programming/Java

Java기초개념정리 (7)접근제어자, Static

접근 제어자 클래스에서 public, default 두 가지만 사용 가능하다. public을 지우면 default가 되며 같은 패키지 안에서만 접근이 가능해진다. 메소드에서 public, protected, default, private 네 종류 모두 사용 가능하다. 기본적으로는 private로 작업하게 된다. 접근 제어자 접근 범위 클래스 패키지 상속 전체 public 접근 제한 없음 ○ ○ ○ ○ protected 동일 패키지와 상속받은 클래스 ○ ○ ○ default 동일 패키지 ○ ○ private 클래스 ○ Static class Player { private String name; private int count; // 기본 초기값 0 public Player(String name) { thi..

Programming/Java

Java기초개념정리 (6)다형성

다형성 polymorphism 다형성은 객체지향에서 중요한 개념으로, 하나의 객체나 메소드가 여러 형태를 가질 수 있는 것을 뜻한다. 인터페이스 정리에서 사용했던 GamingConsole 예시로 알아보는 다형성 public interface GamingConsole { // GamingConsole 인터페이스 선언 public void up(); public void down(); public void right(); public void left(); } 우선 이렇게 GamingConsole 인터페이스를 선언해준다. up, dow, right, left라는 메소드가 정의만 되어있을 뿐 구현은 되어있지 않다. 이제 이 메소드들을 구현하는 클래스인 MarioGame과 ChessGame을 각각 만들어준다. ..

Programming/Java

Java기초개념정리 (5)추상클래스, 인터페이스

추상클래스 활용 '나는 적용법을 제공하고 싶지 않고 대신 알고리즘을 제공하겠다' 하는 경우 '이건 하위 클래스들이 해결해야 하는 문제다' 하는 경우 특징 추상클래스는 다른 추상클래스를 상속할 수 있다 abstract class B extends A 추상클래스는 정의된 변수들을 가질 수 있고 정의된 메소드도 가질 수 있다. 인터페이스 추상클래스와 인터페이스는 아주 다른 개념이다. 인터페이스는 선언을 제공할 뿐 정의를 내리는 게 아니다. 인터페이스에 대해 사고하는 방법 게이밍 콘솔이라고 생각한다. 어떤 게임을 하든지 버튼은 그 게임에서 정의된 역할을 한다. public interface GamingConsole { // GamingConsole 인터페이스 선언 public void up(); public v..

Programming/Java

Java기초개념정리 (4)상속Inheritance

상속 Inheritance SuperClass = 상위 클래스 = 부모 클래스 SubClass = 하위 클래스 = 자식 클래스 다른 클래스에서 이미 사용중인 코드를 재사용할 때 굉장히 유용하다. 단, B(하위) Is a A(상위) 관계일때만 사용하는 걸 추천한다. sub클래스에서 super 클래스의 값들에 접근하려면 super를 쓰면 된다. 예를 들어 super.getEmail() 모든 클래스 = Object클래스의 하위 클래스 아무것도 상속받지 않는 클래스도 사실 객체를 상속받고 있다. Person person = new Person( ); 이렇게 클래스 인스턴스를 생성해보자. 그다음 행에 Person을 입력한 후 .을 입력하자마자 Person 클래스에 없는 메소드(notify, hashCode, to..

Programming/Java

Java기초개념정리 (3)생성자

생성자constructor 지금까지 사용해왔던 setSpeed 메서드 없이도 특정 값을 전달하는 MotorBike 객체를 생성하고 싶을 때 생성자를 활용하면 된다. public class MotorBike { private int speed; MotorBike(int speed) { //생성자 this.speed = speed; } public int getSpeed() { //getter메서드 return speed; } public void setSpeed(int speed) { //setter메서드 System.out.println(speed); System.out.println(this.speed); this.speed = speed; } } public class MotorBikeRunner {..

Programming/Java

Java기초개념정리 (2)객체 지향 프로그래밍 OOP

객체 지향적으로 생각한다는 것 객체 지향적으로 생각한다는 것은 현재 가진 문제에 연관된 여러 요소를 확인하려 노력하는 것이다. 즉, 처음 생각할 것은 관련된 객체가 무엇이 있는지. 그리고 객체에 관련된 요소들을 확인한 다음에 내가 사용하고자 하는 것이 무엇인지 확인한다. 예시1) 비행 비행기 항공사, 제조사, 타입, 포지션 등 ← 데이터 이륙하다, 착륙하다 등 ← 행동 승무원 이름, 주소, 소속 등 ← 데이터 탑승수속하다, 안내하다 등 ← 행동 탑승객 이름, 주소, 국적 등 ← 데이터 체크인하다, 걷다, 구매하다 등 ← 행동 예시2) 온라인 쇼핑 시스템 클래스 고객 이름, 주소 등 로그인, 로그아웃, 물품선택, 계산 등 장바구니 상품 등 상품추가, 상품삭제 등 상품 이름, 가격, 재고 등 주문, 금액 변..