Python 과 C++를 이미 배운 입장에서 정리해봤습니다.
Hello world !
public class Main {
public static void main(String[] args){
System.out.println("Hello World!");
}
}
시작부터 일단 뭐가 엄청 길다
파이썬은 print("Hello World!") 가 끝이었는데
1. 자료형
원시(Primitive) 자료형
JAVA는 Python과 C++ 의 특징을 둘 다 가지고 있다.
포인터가 존재하지 않고 메모리 관리를 직접 하지 않아도 되는 점은 Python과 같지만
변수나 함수의 반환 자료형을 선언할때 지정해줘야 하는 점은 C++과 같다.
public class Sample {
int a = 1;
char = 't';
float c = 3.0;
double d = 4.0;
boolean e = true;
int[] array = {1,2,3,4,5};
}
그러나 C++과 약간의 차이점이 있다.
bool -> boolean
Wrapper class의 존재
그 외의 대부분은 C++과 매우 유사하며
문자열 포맷팅 또한 C++ 처럼 %d, %c, %f 개행문자를 사용한다.
단 String.format()또는 System.out.printf()를 사용해야한다.
배열 선언 또안 C와 동일하게 []를 통해 선언한다.
String
public class Main {
public static void main(String[] args){
String myString1 = "hello world";
String myString2 = "hello";
System.out.println(myString1.equals(myString2)); // return false
System.out.println(myString1.indexOf('h')); // return 0
System.out.println(myString1.contains(myString2)); // return true
System.out.println(myString1.charAt(0)); // return 'h'
System.out.println(myString1.replaceAll("world","java")); // return hello java
System.out.println(myString1.substring(0,4)); // return hello
System.out.println(myString1.equals(myString2)); // false
}
}
C++의 string이 JAVA에서도 String 으로 제공된다.
다만 따로 import(include) 하지 않다고 사용할 수 있다.
List
import java.util.ArrayList;
public class Main {
public static void main(String[] args){
ArrayList myArray = new ArrayList();
myArray.add("123");
myArray.add("456");
System.out.println(myArray.get(0)); // "123"
System.out.println(myArray.get(1)); // "456"
}
}
list는 주로 ArrayList를 이용한다.
C++과는 다르게 add,get 메소드를 이용해 정보를 입력하고 조회한다.
import java.util.Comparator;
import java.util.Arrays;
import java.util.ArrayList;
public class Main {
public static void main(String[] args){
String [] myArray1 = {"123", "456"};
ArrayList <String> myArray2 = new ArrayList <> (Arrays.asList(myArray1));
System.out.println(myArray2.get(0)); // "123"
System.out.println(myArray2.get(1)); // "456"
System.out.println(myArray2.size()); // "2
System.out.println(String.join("", myArray2)); // "123456"
myArray2.sort(Comparator.naturalOrder());
System.out.println(myArray2); // ["123","456"]
myArray2.sort(Comparator.reverseOrder());
System.out.println(myArray2); // ["456", "123"]
}
}
또 <> 제네릭스(Generics) 를 이용해 리스트에 들어갈 자료형을 선언해 줄 수 있다.
size() join() sort() 등의 함수도 사용할 수 있으나 사용법은 C++과 조금씩 차이가 있다.
Map
import java.util.HashMap;
public class Main {
public static void main(String[] args){
HashMap <String,String> myMap = new HashMap <> ();
myMap.put("key1","value1");
myMap.put("key2","value2");
System.out.println(myMap.get("key1")); // "value1"
System.out.println(myMap.containsKey("key2")); // true
System.out.println(myMap.keySet()); //[key1,key2]
System.out.println(myMap.remove("key2")); //value2
System.out.println(myMap.size()); // 1
}
}
HashMap을 통해 Map을 구현 가능하다.
C++ 의 map과 거의 동일하다.
put,get,remove를 통해 삽입,조회,삭제를 할 수 있다.
containsKey를 통해 키 유무를 확인할 수 있고 size를 통해 크기를 알 수 있다.
Set
package project;
import java.util.HashSet;
import java.util.Arrays;
public class Main {
public static void main(String[] args){
HashSet <String> mySet1 = new HashSet <> (Arrays.asList("1","2","3"));
HashSet <String> mySet2 = new HashSet <> (Arrays.asList("3","4","5"));
System.out.println(mySet1); // [1,2,3]
mySet1.retainAll(mySet2); // 교집합
System.out.println(mySet1); // [3]
mySet1.addAll(mySet2); // 합집합
System.out.println(mySet1); // [3,4,5]
mySet1.removeAll(mySet2); // 여집합
System.out.println(mySet1); // []
}
}
HashSet를 통해 Set를 구현이 가능하다.
retailAll,addAll,removeAll을 통해 교집합,합집합,여집합 연산을 수행할 수 있다.
제어문 (if , if else, else, for, while, switch 등등)
제어문 구조는 c와 그냥 일치한다.
c 문법대로 그대로 사용하면 될 듯 하다.
2. Class
생성
package project;
class Animal {
int legs = 4;
}
class Cat extends Animal {
int getLegs(){
return this.legs;
}
}
class Dog extends Animal {
String name;
Dog(String name){
this.name = name;
}
int getLegs(){
return this.legs;
}
String getName(){
return this.name;
}
}
public class Main {
public static void main(String[] args){
Dog dog = new Dog("puppy"); // 클래스 생성
Animal cat = new Cat(); // 업캐스팅
//Dog animal = new Animal(); // 에러! 다운캐스팅은 불가능!!
// System.out.println(cat.getLegs()); //에러!
System.out.println(dog.getLegs()); // 4
System.out.println(dog.getName()); // puppy
}
}
객체 생성 방법은 C++에서 new를 이용해 동적으로 객체를 생성하는 방법과 동일하다.
상속 키워드는 extends 이며 C++과 다르게 다중 상속은 지원하지 않는다.
메소드 오버라이딩 오버로딩 모두 가능하며 업캐스팅 생성은 가능하지만 다운캐스팅은 불가능하다.
생성자는 C++과 동일하게 반환값 없이 클래스 이름을 그대로 사용한다.
Interface
C++에선 제공하지 않는 기능이다.
특정 기능을 구현할 것을 약속하는 추상 형식이다.
다형성 형성에 도움을 주며 다중상속도 가능하다.
05-07 인터페이스
인터페이스(Interface)는 초보 개발자를 괴롭히는 단골손님이다. 인터페이스에 대한 개념없이 코드로만 이해하려고 하면 곧 미궁에 빠지게 된다. 이렇게 이해하기 힘든 인터페이스…
wikidocs.net
추상(abstract) 클래스
C++의 virtual 클래스의 역할을 한다.
interface와 Class의 역할을 모두 할 수 있다.
제대로 공부하려면 연습문제나 간단한 프로젝트를 해보는 게 좋을 것 같다.
그건 다음편에 올려야겠다.
'JAVA' 카테고리의 다른 글
JAVA의 정석 정독하기 #5 - 배열(Array) (0) | 2023.10.29 |
---|---|
JAVA의 정석 정독하기 #4 - 조건문과 반복문 (0) | 2023.10.22 |
JAVA의 정석 정독하기 #3 - 연산자 (0) | 2023.10.07 |
JAVA의 정석 정독하기 #2 - 변수 (0) | 2023.10.03 |
JAVA의 정석 정독하기 #1 - JVM이란? (0) | 2023.10.02 |